2009-10-26 5 views
1

J'ai des difficultés à obtenir des informations à afficher à partir de cette requête. Quelqu'un sait-il où je vais mal?PHP query multiple Tables

Merci!

$query = "SELECT * ". 
      "FROM comments, users ". 
      "WHERE comments.user_id = users.user_id ". 
      "ORDER BY comments.date DESC ". 
      "LIMIT 10"; 

$result = mysql_query($query) or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)) { 


    echo $row['users.user_id']; 
    echo $row['comments.comment']; 


} 
+2

tour error_reporting E_ALL et display_errors On (que seulement sur la boîte de dev) et vous verrez votre problème. –

Répondre

2

Vous obtenez probablement l'erreur car vous triez (ORDER BY) sur un champ qui n'existe pas dans votre requête.

Il serait préférable de ne pas utiliser l'interrogation "SELECT *". Si tout ce dont vous avez besoin sont des valeurs spécifiques, spécifiez-les. Cela aide également lors de la récupération des données ...

$query = "SELECT users.user_id, comments.comment, comments.date ". 
         "FROM comments, users ". 
         "WHERE comments.user_id = users.user_id ". 
         "ORDER BY comments.date DESC ". 
         "LIMIT 10"; 

$result = mysql_query($query) or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)) { 


    echo $row['user_id']; 
    echo $row['comment']; 
    echo $row['date']; 


} 
4

utilisation mysql_fetch_assoc() au lieu de mysql_fetch_array(). Dans votre boucle utiliser le nom de colonne comme la clé du tableau:

while ($row = mysql_fetch_assoc($result)) { 

    echo $row['column_name1']; 
    echo $row['column_name1']; 

} 

Dans votre requête essayez d'être plus précis sur l'instruction select, essayez de ne pas utiliser *.

0

Il est bon de spécifier les noms de colonnes dans une requête plutôt que d'utiliser * - sur certains blocs de données il y a un impact sur les performances et sur tout ce qu'il empêche toute culture de comportement inattendu des changements de table.

Dans l'exemple, je pense que la question est arsing des clés du tableau que vous utilisez - vous n'avez pas besoin d'inclure le nom de la table en eux, juste le nom de la colonne:

echo $row['user_id']; 
    echo $row['comment']; 
0

La meilleure pratique est d'écrire des champs seulement ce que vous avez besoin dans votre requête SQL comme ceci:

$query = "SELECT u.user_id uid, c.comment comment ". 
        "FROM comments c, users u ". 
        "WHERE comments.user_id = users.user_id ". 
        "ORDER BY comments.date DESC ". 
        "LIMIT 10"; 

en utilisant donc le type de requêtes que vous réduisez le temps d'exécution de votre requête et la transmission de données à partir du serveur de base de données à votre script php. Après cette modification de votre cycle transformé en:

while ($row = mysql_fetch_array($result)) { 
echo $row['uid'], $row['comment']; 

}