2010-07-11 5 views
1

J'ai le code suivant:requête MySQL dans une autre requête de la boucle while en PHP

$query = mysql_query("SELECT * FROM activity ORDER BY activity_time DESC LIMIT 50"); 
while($result = mysql_fetch_array($query)) { 
    extract($result); 
    if ($activity_type == "discussion") { 

     $query = mysql_query("SELECT * FROM discussions WHERE discussion_uuid = '$activity_ref'"); 
     while($result = mysql_fetch_array($query)) { 
      extract($result); 
      echo $discussion_user . " said:<br>" . $discussion_text . "<br>"; 
     } 

    } elseif ($activity_type == "file") { 

    } 
} 

Mais il retourne juste la dernière ligne. Mon but est d'avoir une liste chronologique des "activités" affichées chacune différemment selon leur type.

Répondre

4

Votre requête en utilisant $ et le résultat $ deux fois pour la seconde boucle est le résultat de écrasant la première et l'arrêt ...

$ query = mysql_query ("SELECT * FROM activité ORDER BY activity_time DESC LIMIT 50") ;

et

$ query = mysql_query ("SELECT * FROM discussions au cours desquelles discussion_uuid = 'activity_ref de $'");

même avec des résultats $ var ...

Je vous suggère de changer de requête $ et query2 $, mais mieux d'utiliser quelque chose comme

$activies = mysql_query("SELECT * FROM activity ORDER BY activity_time DESC LIMIT 50"); 
while($activity = mysql_fetch_array($activies)) { 

et

$discussions = mysql_query("SELECT * FROM discussions WHERE discussion_uuid = '$activity_ref'"); 
while($discussion = mysql_fetch_array($discussions)) { 

Je voudrais évitez également d'utiliser l'extrait - comme vous pourriez être en train d'écraser les vars, vous ne vous attendez pas à ...

1

Vous devez créer une autre connexion à la base de données afin de pouvoir les exécuter en même temps.

OU

Vous pouvez charger les résultats de la première dans un tableau, et puis juste boucle à travers le réseau.

+2

+1 Notez également que PHP a * déjà * chargé les résultats de la première requête en mémoire, sauf si vous utilisez 'mysql_unbuffered_query()'. Donc, ne vous inquiétez pas de l'utilisation de la mémoire de chargement de l'ensemble des résultats. –

+0

+1 Bill - Bon point sur l'utilisation de la mémoire. –

Questions connexes