1
SELECT *, IFNULL(parent, id) AS p, IFNULL(reply_comment_id, id) AS r
FROM article_comments ORDER BY p ASC, r ASC, date DESC

在此处输入图像描述

我想使用限制。如果我有更多行,我想将查询限制为“p”。在图像中:("p": 1, 1, 1, 1, 1) – 这是一个,("p": 2, 2, 2, 2, 2, 2, 2) – 这是两个...

例如,我想要:如果我使用 LIMIT 1,则只显示 ("p": 1, 1, 1, 1, 1)。在此处输入图像描述

4

1 回答 1

0

这是我将使用的查询:

SELECT * FROM
FROM article_comments
WHERE id = 1 OR parent = 1
ORDER BY parent ASC, reply_comment_id ASC, `date` DESC

请注意,我认为这里不需要您的计算列。当按 parent 和 reply_comment_id 以升序方式排序时,NULL 值将排在第一位。

确保您在 parent、reply_comment_id 和 date 字段上有索引(除了 id,我假设它是主键)

此外,您可能需要考虑为日期列使用日期时间字段,而不是 unix 时间戳。在查看数据库中的数据以及尝试查询日期范围时,它对用户非常友好/因此可以这样编写过滤器:

WHERE `date` BETWEEN '2012-01-01 00:00:00' AND '2012-12-31 23:59:59'

而不必由于时间戳转换。

于 2012-09-26T21:27:56.593 回答