【问题标题】:mysql left join with limit 0,2mysql左连接限制为0,2
【发布时间】:2016-08-12 21:22:29
【问题描述】:

评论表

+------+----------+
| id   | comment  | 
+------+----------+
|    1 | foo      |
|    2 | bar      |
|    3 | foobar   |
+------+----------+

回复表

+------+----------+------------+
| id   | reply   |comment_id  |
+------+----------+------------+
|    1 | nice lol | 1          |
|    2 | ok ok    | 2          |
|    3 | hello    | 1          |
|    4 | hello2   | 1          |
|    5 | hello1   | 1          |
+------+----------+------------+



 SELECT
`comment`.`comment`,
`x`.`reply`
FROM `comment` LEFT JOIN
(SELECT GROUP_CONCAT(`reply`) as reply ,reply.commnt_id FROM `reply` 
GROUP BY   `reply`.`comment_id` ORDER BY `reply`.`id` LIMIT 0,1)x ON x.comment_id =   comment.id

结果是

+----------+-----------------+  
| comment  | reply          |  
+----------+-----------------+ 
|    foo   | nice lol,hello  | 
|    bar   | NULL            | 
|    off   | null            | 
+------+---------------------+ 

为什么第二条评论为空但如果我将限制设为 0,4 它会显示它的问题

【问题讨论】:

  • 您是否尝试显示每条评论的前 2 条回复?
  • 值得指出的是,正确的拼写是“reply”而不是“replay”。如果你有一个团队,他们会感谢你解决这个问题!

标签: mysql


【解决方案1】:

Mysql 不支持 group by 子句的限制。为了实现这种类型的功能,我们可以破解 group_concat 如下所示:

SELECT
comment.comment,
x.replay
FROM comment LEFT JOIN
 (SELECT 
    REPLACE(substring_index(group_concat(replay SEPARATOR '@@'), '@@', 2), '@@', ',') as replay ,replay.commnt_id 
  FROM replay 
  GROUP BY  replay.comment_id ORDER BY replay.id LIMIT 0,1)x 
ON x.comment_id =   comment.id

这是考虑到您的回复中不会包含“@@”。

相关帖子:

GROUP_CONCAT with limit

Mysql group_concat limit rows in grouping

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2017-07-01
    • 2017-04-22
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多