У меня есть сайт 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';
Таблица, к которой мне нужно присоединиться, называется радиоактивностью и выглядит так.
@радиоактивность
класс | идентификатор | энергия
комментарий | 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.
Я знаю, что это много и очень подробно, но я подумал, что это лучшее место.