0

使用 Drupal 6,我的目标是订购一组类似于 Facebook 输出评论的线程评论:每个线程中的“锚”或第一条评论按 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 下工作。

4

1 回答 1

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 FROM commentsc INNER JOIN usersu ON c.uid = u.uid WHERE c.nid = 141737 AND c.status = 0 ORDER BY SUBSTRING(thread, 1, (LENGTH(thread) - 1))) c INNER JOIN usersu ON c.uid = u。 uid WHERE c.nid = 141737 AND c.status = 0 ORDER BY SUBSTRING(thread, 1, 2) DESC

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

于 2010-10-04T06:09:35.993 回答