Je développe un site où les utilisateurs peuvent poster des commentaires et où chaque commentaire est classé par catégorie. J'ai une page où les utilisateurs peuvent aller et voir une liste de toutes les catégories sur le site avec les 5 derniers commentaires postés dans ces catégories.
Les informations que je dois extraire de la base de données sont les suivantes :
- Une liste de catégories
- 5 commentaires dans chaque catégorie
Voici ce que j'ai en ce moment (simplifié en PHP de base) :
echo "<ul>";
$query = mysql_query("SELECT * FROM categories");
while($result = mysql_fetch_assoc($query)){
echo "<li><h2>{$result['category_name']}</h2>";
$query_comments = mysql_query(
"SELECT * FROM comments WHERE ".
"category_id = '{$result['id']}' ".
"ORDER BY created_at DESC LIMIT 5");
while($result_comments = mysql_fetch_assoc($query_comments)){
echo "{$result_comments['username']} wrote {$result_comments['text']} on {$result_comments['created_at']}<br>";
}
echo "</li>";
}
echo "</ul>";
Cela ressemblerait à ceci (en supposant que mes catégories sont des noms de fruits)
Apple
Jay wrote blah blah blah - August 5, 2009
Bob wrote hello hello hello - August 5, 2009
Tom wrote super super - August 5, 2009
Edward wrote no no no - August 5, 2009
Kaysie wrote super no! - August 5, 2009
Orange
Cassie wrote ye ye ye ye - August 5, 2009
Alfonce wrote whoohoo - August 5, 2009
Arthur wrote love oranges - August 5, 2009
Alice wrote yes yes yes - August 5, 2009
Xavier wrote Lorem ipsum dolor sit amet - August 5, 2009
Strawberry
Chris wrote Lorem ipsum dolor sit amet - August 5, 2009
Hubert wrote Lorem ipsum dolor sit amet - August 5, 2009
Martin wrote Lorem ipsum dolor sit amet - August 5, 2009
Lyon wrote Lorem ipsum dolor sit amet - August 5, 2009
Paris wrote Lorem ipsum dolor sit amet - August 5, 2009
Blueberry
etc...
Le problème est que, s'il y a beaucoup de catégories, j'aurai des problèmes de performance, surtout si beaucoup d'utilisateurs se servent du site.
Je m'efforce de trouver un moyen de réduire le nombre de requêtes nécessaires. Quelqu'un a-t-il une idée de la façon dont je pourrais le faire ?
UPDATE J'ai essayé de faire un LEFT JOIN de la table des catégories avec la table des commentaires mais je n'ai pas trouvé le moyen de limiter le nombre de commentaires par catégorie car si j'utilise LIMIT 5, cela ne limite que le nombre de commentaires retournés.