我有一个 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';
我需要加入的表叫做radiactivity,看起来像这样
@放射性
班级 | 编号 | 活力
评论 | 1 | 5 条
评论 | 2 | 8
条评论 | 3 | 27
条评论 | 4 | 13
此表中的 id 列与 comments 表中的 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 值对线程的每个级别内的评论进行排序。
我知道这很多而且非常详细,但我认为这是最好的场所。