4

この質問が既に尋ねられている、または回答されている場合は本当に申し訳ありませんが、必要なものが見つからないようです.

私はこのビルドの他のすべての部分を持っています.私の唯一の質問は、インラインコメントを囲むことです. Facebook が x コメントをボタンでレンダリングして y コメントをすべて表示するのと同じようなことをしたいと思います。

ただし、これを行う方法は次の2つだけです。

  1. 各アイテムをレンダリングするループで SELECT を実行する (これに対する答えを持っている人なら誰でも、これはひどい決断であることに同意するでしょう)
  2. 1 つの大きな選択を実行して、news_id が特定のサブセットに含まれるすべてのコメントを取得し、PHP を使用してそれらを反復処理し、最新の x を選択し、残りを無視します。

どちらも良い解決策とは思えません。ただし、どちらも大量のリソースの浪費を伴うためです。

これを実装するための潜在的な提案はありますか?

4

3 に答える 3

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

これは非常にシンプルですが、コメントに対する強力なクエリです。

実際のコード

<?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"]}";
}
?>
于 2011-03-30T00:44:41.840 に答える
0

を実行しJOIN、後でデータを整理します。何かのようなもの:

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

非表示になる余分なコメントがあるというパフォーマンスの問題は実際には無視できます-そして、「すべて表示」ボタンをクリックしたときに他のコメントをロードするためのajaxリクエストを作成するという追加のオーバーヘッドはありません-あなたはそれらを非表示にすることができます、そしてそれらを即座に表示します。

上位40件の投稿のみが必要な場合は、この条件をwhere句に追加する必要があります(実際、実行しているフィルタリングをラップすることもできます)。

WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)
于 2011-04-17T02:27:37.327 に答える
0

句に LIMIT を追加した SELECT を使用し、DESC 順で「id」で並べ替えます。みたいな..「SELECT * FROMコメントLIMIT 3 DESC」

ユーザーが「さらにコメントを読み込む」ボタンをクリックすると、「SELECT * FROM comments LIMIT X, 3 DESC」のようなクエリである種の AJAX リクエストが実行されます。

于 2011-03-30T00:46:08.923 に答える