Drupal 6:“Facebook”风格评论排序(线程,降序+升序)

时间:2010-10-04 04:28:37

标签: drupal drupal-6 drupal-comments

使用Drupal 6,我的目标是订购一组类似于Facebook输出注释的线程注释:在每个线程中使用'anchor'或第一个注释排序DESC,并且任何'内部'线程回复已排序的ASC,以便最新评论在底部。

这是来自comment_render的SQL查询,由COMMENT_ORDER_NEWEST_FIRST排序:

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.signature,
u.picture, u.data, c.thread, c.status
FROM {comments} c INNER JOIN {users} u
ON c.uid = u.uid WHERE c.nid = 141737
AND c.status = 0 ORDER BY c.thread
DESC

这将返回所有注释,首先按最新线程排序:

03/
03.00/
02/
02.06/
02.05/
02.04/
02.03/
02.01/
02.00/
01/

在我的情况下,所需的顺序是:

03/
03.00/
02/
02.00/
02.01/
02.02/
02.03/
02.04/
02.05/
02.06/
01/

再次想到Facebook墙,你就明白了。

任何人都可以帮助适当地增强SQL查询吗?在我的情况下(但可能并非在所有情况下),线程深度通过自定义模块强制限制为1。

另一个注意事项 - 在我的情况下,它只需要在MySQL下工作。

1 个答案:

答案 0 :(得分:0)

这个查询有效,但我又是一个SQL菜鸟,所以这可能不完全正确。

  

选择c.cid作为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.signature,   u.picture,u.data,c.thread,c.status   FROM(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.signature,   u.picture,u.data,c.thread,c.status   来自comments c INNER JOIN users你   ON c.uid = u.uid WHERE c.nid = 141737   AND c.status = 0 ORDER BY   SUBSTRING(thread,1,(LENGTH(thread) -   1)))c INNER JOIN users u ON c.uid =   u.uid WHERE c.nid = 141737 AND   c.status = 0 ORDER BY   SUBSTRING(thread,1,2)DESC

这个想法是首先使用基于完整线程(02.05等)的排序进行查询,然后在线程字段的前两个字符上再做一次SELECT。我可以获得一些优化帮助,还是“正确”?