MySQL LIMIT 0,15其中15是父数

我有一张桌子,我正在尝试为ajax分页获取评论。

你可以在这里看到一个SQLFiddle:

http://sqlfiddle.com/#!2/5d36a/1

但基本上,没有0,15LIMIT ,它按预期工作:

例如,所有作为孩子的评论都将显示在父注释的下方。

当我介绍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个第一个父注释
  • 对于每个人抓住孩子和父母的副本

  • 那这个呢:

    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?