SELECT *, IFNULL(parent, id) AS p, IFNULL(reply_comment_id, id) AS r
FROM article_comments ORDER BY p ASC, r ASC, date DESC
我想使用LIMIT。如果我有更多行,我想通过“p”限制查询。 在图像中:(“p”:1,1,1,1,1) - 这是一个,(“p”:2,2,2,2,2,2,2) - 这是两个... < / p>
例如,我想要:如果我使用LIMIT 1,那么只显示(“p”:1,1,1,1,1)。
答案 0 :(得分:0)
以下是我将使用的查询:
SELECT * FROM
FROM article_comments
WHERE id = 1 OR parent = 1
ORDER BY parent ASC, reply_comment_id ASC, `date` DESC
请注意,我认为此处不需要您的计算列。当父级和reply_comment_id以升序方式排序时,NULL值将首先排序。
确保在parent,reply_comment_id和日期字段上有索引(除了id,我认为是主键)
此外,您可能需要考虑在日期列中使用日期时间字段,而不是使用unix时间戳。在查看数据库中的数据时,以及在尝试查询日期范围时,它非常用户友好/所以可以像这样编写过滤器:
WHERE `date` BETWEEN '2012-01-01 00:00:00' AND '2012-12-31 23:59:59'
而不是必须进行适当的时间戳转换。