У меня есть сайт 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. Если поток имел такие структуры:
комментарий
-comment
--comment
--comment
-comment
-comment
Значения c.thread будут
1
1.1
1.1.1
1.1.2
1.2
1,3
Я хочу сохранить эту структуру, но иметь комментарии на каждом уровне упорядоченного потока, основываясь на их текущем балле, а не на их значении c.thread.
Я знаю, что это много и очень подробно, но я подумал, что это лучшее место.