現在、スレッド化された時系列の逆順でコメントを表示する Drupal サイトがあります。Reddit/Hacker News のように機能するように変更しようとしています。各スレッド内のスレッドとコメントは、追加した投票システムに基づいて現在のスコア順に並べ替えられます。
コメントをレンダリングするために使用されるクエリを今すぐ見つけました。私が理解しているように、このクエリの各コメントのスコア データも選択する方法を見つける必要があります。次に、コメントをスレッドに保持したまま、スコアの降順で並べ替える必要があります。
クエリは次のとおりです。
$query = 'SELECT c.cid as cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.picture, u.data, c.score, c.users, c.thread, c.status FROM {comments} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.nid = %d ORDER BY c.thread DESC';
参加する必要があるテーブルは放射能と呼ばれ、次のようになります
@放射能
クラス | ID | エネルギー
コメント | 1 | 5
コメント | 2 | 8
コメント | 3 | 27
コメント | 4 | 13
このテーブルの id 列は、コメント テーブルの cid 列と同期します。
スコアリングデータを取り込むためにこれを試しました:
$query = "SELECT c.cid as cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.picture, u.data, c.score, c.users, c.thread, c.status, r.energy, r.id, r.class FROM {comments} c INNER JOIN {users} u ON c.uid = u.uid INNER JOIN {radioactivity} r ON c.cid = r.id WHERE c.nid = %d AND r.class = 'comment' ORDER BY c.thread DESC";
このクエリは、放射能テーブルにエントリがあるコメントのみを返します。投票を受けていないコメントはテーブルにまったく表示されないため、取得されません。これを変更して、すべてのコメントを取得するにはどうすればよいですか?
次に、クエリの最後を変更して、スレッド内にコメントを保持したまま、コメントをスコア順に並べ替えるにはどうすればよいでしょうか?
現在、コメントは c.thread に基づいてソートされています。スレッドが次のような構造の場合:
コメント-
コメント
--コメント --コメント
-
コメント-
コメント
c.thread の値は次のようになります。
1
1.1
1.1.1
1.1.2
1.2
1.3
この構造を維持したいのですが、スレッドの各レベル内のコメントは、c.thread の値ではなく、現在のスコアに基づいて並べ替えます。
これはたくさんあり、非常に詳細であることは知っていますが、これが最高の会場だと思いました.