【问题标题】:Drupal 6: "Facebook" style comment ordering (threaded, descending+ascending)Drupal 6:“Facebook”风格的评论排序(线程,降序+升序)
【发布时间】:2013-06-04 22:14:21
【问题描述】:

使用 Drupal 6,我的目标是订购一组类似于 Facebook 输出 cmets 的线程化 cmets:每个线程中的“锚”或第一条评论按 DESC 排序,任何“内部”线程回复按 ASC 排序,因此最新的 cmets 在底部。

这是来自 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

这将返回所有 cmets,按最新线程优先排序:

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 下工作。

【问题讨论】:

    标签: drupal drupal-6 drupal-comments


    【解决方案1】:

    这个查询有效,但我还是一个 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 注册名称,u.signature, u.picture、u.data、c.thread、c.status FROM (选择 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 注册名称,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 SUBSTRING(线程,1,(长度(线程)- 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。我可以得到一些帮助来优化它还是“正确”?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多