2011-04-02 4 views
1

Bon, après avoir cogné ma tête contre le mur pendant environ 2 heures, j'ai besoin d'aide. J'ai une requête qui tire des "commentaires" basés sur des utilisateurs "followers". Les suiveurs ont un identifiant unique, et disons juste pour la facilité d'utilisation, leurs identifiants sont 4 et 5. La requête renvoie tous les suiveurs, donc il pourrait y avoir bien plus que deux lignes. Cette requête crée une foreach que je veux dire pour chaque "suiveur" exécuter cette requête. Ensuite, cette requête doit créer un fetch_assoc() afin que les données puissent être rappelées plus tard sur la page. La façon dont j'ai le code maintenant, il montre seulement les messages de suiveur 4, et non 5. J'ai essayé d'utiliser des compteurs pour ajouter des noms de variables afin qu'ils ne soient pas écrasés à chaque fois, mais cela n'aide pas. Merci beaucoup!Utilisation de requêtes imbriquées dans des boucles foreach imbriquées

$sqlb ="SELECT myfriend_ID FROM friends WHERE my_id = '$myuid'"; 
$resultb = mysql_query($sqlb,$db); 
$numa = mysql_num_rows($resultb); 
if($numa) 
{ 
    while(($follower = mysql_fetch_assoc($resultb))) { 
     $followers[] = $follower; 
    } 
} 
$i=0; 
foreach($followers as $follower) 
{ 
    $i++; 
    $fnub = $follower['myfollower_ID'];//this will print 4 and 5 
    $fnum = $fnub; 

    $sql = "SELECT * FROM usr, feed, course WHERE usr.usr_id = '$fnum' AND 
      feed.usr_id = '$fnum' AND course.usr_id = '$fnum' ORDER BY Feed_ID desc"; 
    $result = mysql_query($sql,$db); 
    $num.$fnum = mysql_num_rows($result); 
    if($num.$fnum) 
    { 
     while(($feed = mysql_fetch_assoc($result))) { 
      $feeds[] = $feed; 
     } 
     foreach($feeds as $feed) 
     { 
      echo $feed['comment']; 
     } 
    } 
} 
+0

Vous devriez vraiment nettoyer votre code. Bouclage inutile, les devoirs sont là. Vous sélectionnez myfriend_ID dans la requête sql mais en utilisant myfollower_ID. et probablement $ suiveur ['myfollower_ID'] cela vient de n'importe où ailleurs. – Gaurav

+0

droite, j'ai l'intention de dès que je comprends comment le faire fonctionner, les $ i que vous voyez sont des restes de quelques tentatives d'ajouter $ résultat et $ sql comme j'ai essayé de faire avec $ fnum et $ num – Ryan

+0

Quelque chose à stackoverflow, c'est une bonne étiquette de réduire le code à un minimum pour que les gens n'aient pas à perdre du temps en éliminant toutes les ordures. "$ i" par exemple est complètement hors de propos ici. – EboMike

Répondre

1
$sqlb ="SELECT myfriend_ID FROM friends WHERE my_id = '$myuid'"; 
$resultb = mysql_query($sqlb,$db); 
$follower = array(); 

if(mysql_num_rows($resultb)) 
{ 
    while(($follower = mysql_fetch_assoc($resultb))) { 
     $fnum = $follower['myfriend_ID'];//what is the column name 
     $sql = "SELECT * FROM usr, feed, course WHERE usr.usr_id = '$fnum' AND feed.usr_id = '$fnum' AND course.usr_id = '$fnum' ORDER BY Feed_ID desc"; 
     $result = mysql_query($sql,$db); 
     if(mysql_num_rows($result)) 
     { 
     while(($feed = mysql_fetch_assoc($result))) { 
      echo $feed['comment']; 
     } 
    } 
} 

Et vous devez combiner ces deux requêtes en simple. Mais je ne suis pas trop bon en SQL. Probablement un autre peut aider.

0

Vous attribuez $ i, puis vous incrémentez $ i dans le foreach, mais vous n'utilisez jamais $ i pour rien d'autre, je ne suis pas sûr de ce que ce compteur est censé faire. Je ne sais pas pourquoi vous attribuez une deuxième variable à la valeur de $ fnub, pourquoi ne pas simplement utiliser $ fnub à chaque fois? Plus tard vous utilisez (ce que nous pouvons seulement supposer) une variable $ num vide et ajoutez $ fnum avec - je ne sais pas pourquoi - ou même pourquoi vous devez assigner quoi que ce soit aux lignes num, utilisez simplement la fonction dans le if comme cela semble être la seule instance que vous utilisez $ num. $ fnum.

Vous pouvez extraire complètement votre dernier foreach et déplacer le contenu de cette boucle dans le temps avant qu'il ne réponde sur les mêmes données, il vous suffit d'assigner les valeurs, puis echo $ feed ['comment'] là, alors il va déplacer le pointeur et avoir la prochaine valeur prête pour vous tout seul.

+0

ouais, son bâclé, mais le $ i était censé être pour ajouter d'autres variables, ça ne marche pas, donc je l'ai sorti, sauf que j'ai oublié d'élaguer des choses comme $ i et $ fnum, ils étaient tous simplement expérimentaux – Ryan

+0

Ce que j'essayais de comprendre, c'est que si vous le nettoyez, il pourrait être beaucoup plus facile de voir où se situe le problème. À l'heure actuelle, il est très difficile de lire les arguments de chacun des mêmes arguments avec un s à la fin, puis d'utiliser ces noms plus tard, etc. Il est très difficile de se souvenir de tout et de tout ce qui est supposé aller, etc. – linus72982