我有一张表,我正在尝试为 ajax 分页获取评论。
你可以在这里看到一个 SQLFiddle:
http://sqlfiddle.com/#!2/5d36a/1
但基本上,如果没有 0,15
的 LIMIT
,它会按预期工作:
例如所有子评论都将与父评论一起显示/显示在父评论下方。
当我引入LIMIT
时问题就来了。在上面的例子中,它会获取 15 条评论,但是因为第 16 条评论是 id=6
的评论的子评论,所以它不会被返回。如果将其更改为 LIMIT 0,16
,它将正确返回。
基本上我一次只想返回 0,15
个父评论,但不限制子评论。
有人告诉我尝试一个临时表,但后来有人告诉我它可能更简单(并且只使用一个带有内部选择的连接),但我有点困惑。
最佳答案
您可以使用以下查询使其工作:
SELECT
comment.id,
comment.deleted,
comment.comment,
comment.user_id,
comment.created,
comment.parent_id,
s.id as sid,
s.user_id submissionUserId,
u.username,
u.photo AS userPhoto
FROM (SELECT c.*
FROM submissions_comments AS c
WHERE c.parent_id IS NULL
ORDER BY c.created DESC
LIMIT 0, 15) AS base
LEFT JOIN submissions_comments AS comment ON (
comment.parent_id = base.id
OR comment.id = base.id
)
LEFT JOIN users u ON comment.user_id = u.id
LEFT JOIN submissions s ON comment.submission_id = s.id
WHERE base.deleted = 0
ORDER BY base.created DESC
您可以看到它的实际效果:http://sqlfiddle.com/#!2/6d90f5/1
但我不知道它在性能方面是否有效。
它主要做的是:
- 在子查询(或内部查询)中抓取前 15 个父评论
- 对于每个获取 child 和 parent 的副本
关于MySQL LIMIT 0,15 其中 15 是 parent_ids 的数量,不是 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277403/