MySQL LIMIT 0,15其中15是父数
我有一张桌子,我正在尝试为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
但我不知道它在性能方面是否会有效。
它基本上是:
那这个呢:
SELECT sc.id,
sc.deleted,
sc.comment,
sc.user_id,
sc.created,
sc.parent_id,
s.id as sid,
s.user_id submissionUserId,
u.username,
u.photo AS userPhoto,
coalesce(p.id, sc.id) as ocol1,
coalesce(p.created, sc.created) as ocol2
FROM submissions_comments AS sc
LEFT JOIN users AS u ON sc.user_id = u.id
LEFT JOIN submissions AS s ON sc.submission_id = s.id
LEFT JOIN submissions_comments AS p on p.id = sc.parent_id
where coalesce(p.id, sc.id) between 0 and 15
and sc.deleted = 0
ORDER BY ocol1, ocol2
显然,这是使用id列来'分页'的行 - 如果他们经常被删除,这可能会留下页面稀疏或空。 我可能会试图改变它来选择给定数量的父母,而不仅仅是一个范围。 如果您对这种方法感兴趣,请随时澄清您在这方面的要求。
链接地址: http://www.djcxy.com/p/80811.html上一篇: MySQL LIMIT 0,15 where 15 is the number of parent
下一篇: Stateless Object Oriented Programming vs. Functional Programming?