2011-09-14 2 views
0

J'essaye d'écrire une fonction où j'obtiendrai l'identification d'une table et puis je veux avoir tous les id dans le tableau ainsi que ces id utilisés dans une autre fonction à traiter. J'ai écrit ci-dessous, mais ce n'est pas la méthode tableau et aussi l'impression des ID deux fois. J'ai cherché en ligne et ils suggèrent tous d'utiliser mysql_fetch_assoc et de supprimer pour chaque ... mais dans mon cas, j'utilise l'adaptateur zend fetchAll pour obtenir la sortie. S'il vous plaît laissez-moi savoir comment je peux obtenir les ID dans le tableau et aussi une seule fois afin que je puisse passer ce tableau et chaque ID est traité un par un ... maintenant, avec ce que j'ai, s'arrête juste après le premier traitement. Merci.mysql sélectionnez la requête avec php foreach

function getID() 
    { 
    $sql = 'SELECT user_id FROM users WHERE ready = "1" '; 
    $idList = $this->getAdapter()->fetchAll($sql); 
    if(!empty($idList)) { 
     foreach($idList as $value) { 
      echo $value['user_id']."\n"; 
     } 
    } 
    } 


Output 
201 
223 
231 
334 
201 
223 
231 
334 
+0

En ce qui concerne la duplication, êtes-vous absolument certain que la fonction n'est pas appelée deux fois? Ce code ne devrait vraiment les afficher qu'une seule fois. Une autre possibilité éloignée est que les utilisateurs sont réellement deux fois dans la base de données, bien que cela n'ait pas beaucoup de sens si 'user_id' est la clé primaire. – Teekin

+0

Salut, merci, je l'avais appelé dans un autre endroit, mais je pensais appel qui donnera l'ID que je peux traiter .., je l'ai enlevé maintenant et encore testé la fonction, maintenant il montre une seule fois .. – geej

Répondre

1

Essayez ceci.

function getIDs() { 
    $result = array(); 
    $sql = 'SELECT user_id FROM users WHERE ready = "1" '; 
    $idList = $this->getAdapter()->fetchAll($sql); 
    if(!empty($idList)) { 
    foreach($idList as $value) { 
     echo $value['user_id']."\n"; 
     array_push(result, $value['user_id']); 
    } 
    } 
    // $result = array_unique($result); 
    return $result; 
} 

Vous obtiendrez alors le tableau par:

$bunch_of_ids = getIDs();

Vous devez savoir pourquoi ils sont dupliqués, mais au cas où vous ne pouvez pas, vous pouvez faire le contenu du tableau unique avec:

$result = array_unique($result);

Mettez ce droit avant return $result; à l'intérieur de la fonction. Je l'ai commenté dans la fonction ci-dessus car il serait beaucoup mieux de savoir pourquoi il est dupliqué en premier lieu. Comme je l'ai noté dans un commentaire à votre question, s'il vous plaît assurez-vous que la fonction n'est pas appelée deux fois. Vérifiez également la présence d'entrées en double dans la base de données (bien que cela ne soit pas possible si 'user_id' est une clé primaire).

(S'il vous plaît noter aussi que je renomme la fonction à GetIDs() parce qu'il n'a pas de sens d'avoir une fonction getID() retour des valeurs multiples. :))

+0

quand je dis echo $ result, il montre "array" .. j'ai supprimé l'appel de la fonction dans d'autres endroits et je l'ai testé seul. quelque chose de mal que je fais? – geej

+0

comment je l'appelle? $ Bunch_of_ids = getIDs(); à l'endroit où je veux passer les ID en tant que tableau? – geej

+0

Il est normal que vous ne puissiez pas répercuter le tableau car c'est un tableau. Si vous voulez afficher le contenu, essayez "print_r ($ result)". Cela devrait vous montrer le contenu. Je ne suis pas sûr de comprendre la deuxième question ... vous utilisez juste getIDs() où vous le voulez.Qu'il s'appelle $ bunch_of_ids ou n'importe quoi d'autre n'a pas d'importance. Je ne connais pas votre code où vous voulez utiliser getIDs() - Je ne sais même pas pourquoi vous le voulez. :) – Teekin

0

cette fonction est correcte, mais si vous voulez un tableau:

if(!empty($idList)) { 
    foreach($idList as $value) { 
     $array[] = $value['user_id']; 
    } 

et si 'user_id' vraiment sont répétées:

$array = array_unique($array); 
0

Votre fonction semble correct pour moi, êtes-vous sûr vous n'appelez pas deux fois pour expliquer la double sortie?

0
<?php 
function getID(){ 
$get = mysql_query("SELECT user_id FROM users WHERE ready = '1'", $yhteys); 

    for ($i = 0; $i < mysql_num_rows($get); $i++) { 
    $id = mysql_result($get, $i, "user_id"); 
    $userids[] = $id; 
    } 
return $userids; 
} 
?> 
+0

'mysql_num_rows' est appelé evry pour la boucle. ça peut être lent si mysql_num_rows est grand – k102

0

Je pense que le code est bien. Je ne vois aucune erreur là-bas.