Question

Je suis vraiment désolé si cette question a déjà été posée ou répondu, mais je ne semble pas tout à fait trouver ce dont j'ai besoin.

J'ai tous les autres éléments construits, ma seule question est des commentaires en ligne environnants. Je voudrais faire quelque chose de similaire à ce que fait Facebook où ils rendent x commentaires avec un bouton pour afficher tous les commentaires.

Cependant, les deux seules façons de voir de le faire sont:

  1. Effectuer un choix dans la boucle qui rend chaque élément (je pense que quiconque pourrait avoir une réponse à cela conviendrait avec moi qu'il s'agit d'une décision terrible)
  2. Effectuer un grand choix pour extraire tous les commentaires où News_id se trouve dans un certain sous-ensemble, puis utiliser PHP pour les itérer sur eux, sélectionner le X le plus récent et ignorer le reste.

Aucun de ces éléments ne semble être une bonne solution; Cependant, car ils impliquent tous les deux un énorme gaspillage de ressources.

Quelqu'un a-t-il une suggestion potentielle pour la mise en œuvre?

Était-ce utile?

La solution

SELECT * FROM comments_table WHERE article_id = {something} LIMIT {no_of_comments_per_page} SORT BY date DESC

Il s'agit d'une requête très simple mais puissante pour les commentaires.

Code réel

<?php
$sql = "SELECT * FROM comments_table WHERE article_id = 24 LIMIT 40 SORT BY date DESC";
$data = mysql_query($sql);
$comments = mysql_fetch_assoc($data);
foreach($comments as $comment){
  $ct++;
  echo "ID: {$ct}";
  echo "<br />";
  echo "Comment: {$comment["comment"]} by {$comment["user"]}";
  echo "Date: {$comment["date"]}";
}
?>

Autres conseils

J'utiliserais une sélection avec une limite ajoutée à la clause, commandant par «id» dans l'ordre desc. Quelque chose comme .. "Sélectionner * parmi les commentaires limite 3 desc"

Lorsque l'utilisateur clique sur le bouton "Chargez plus de commentaires", effectuez un certain type de demande Ajax avec une requête similaire à .. "Sélectionner * dans les commentaires Limit x, 3 desc"

Je ferais un JOIN, et trier les données après. Quelque chose comme:

SELECT articles.id, articles.text, articles.date, 
       comments.id, comments.text, comments.date
FROM articles LEFT JOIN comments ON (comments.article_id = articles.id)
WHERE {some criteria} ORDER BY articles.date, comments.date

Le problème de performance d'avoir des commentaires supplémentaires qui seraient cachés est vraiment négligeable - et vous n'avez pas les frais généraux supplémentaires de faire une demande Ajax pour charger les autres commentaires lorsqu'ils cliquent sur ce bouton `` voir tout '' - vous pouvez simplement les cacher, puis les afficher instantanément.

Si vous ne vouliez que les 40 meilleurs messages, vous devrez ajouter cette condition à la clause Where (en fait, vous pourriez envelopper le filtrage que vous faites également):

WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top