【发布时间】:2010-11-30 07:43:18
【问题描述】:
我有一个 Drupal 站点,该站点当前以线程、反向时间顺序显示 cmets。我正在尝试将其更改为像 Reddit/Hacker News 一样工作,其中每个线程中的线程和 cmets 根据我添加的投票系统按当前分数排序。
我现在找到了用于呈现 cmets 的查询。据我了解,我需要找到一种方法来为此查询中的每个评论选择分数数据,然后我需要按分数的降序对 cmets 进行排序,同时仍将它们保留在线程中。
这是查询:
$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';
我需要加入的表叫radioactivity,看起来像这样
@radioactivity
类 |编号 |能源
评论 | 1 | 5
评论 | 2 | 8
评论 | 3 | 27
评论 | 4 | 13
此表中的 id 列与 cmets 表中的 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";
此查询仅返回在放射性表中有条目的 cmets。没有获得任何选票的 cmets 根本不会出现在表格中,因此它们没有被抓住。如何更改它以获取所有 cmets?
然后如何更改查询的结尾,以便它按分数对 cmets 进行排序,同时仍将它们保留在线程中?
现在 cmets 是基于 c.thread 排序的。如果线程是这样的结构:
评论
-评论
--评论
--评论
-评论
-评论
c.thread 值为
1
1.1
1.1.1
1.1.2
1.2
1.3
我想保留这个结构,但是根据他们当前的分数而不是他们的 c.thread 值对线程的每个级别内的 cmets 进行排序。
我知道这很多而且非常详细,但我认为这是最好的场所。
【问题讨论】:
标签: mysql drupal reddit drupal-5