MySQL:左连接问题,返回的记录太多

MySQL:左连接问题,返回的记录太多,mysql,json,left-join,Mysql,Json,Left Join,我在MySQL中得到了以下shema 表“项目” 表“项目关系” 表“子项” 表“评论” 因此,我希望通过SQL查询返回以下数据: 项目编号 名字 描述 评论数 JSON格式的子数据 下面是我正在做的,但JSON数据看起来是乘以行数、注释数或子行数 SELECT i.item_id, i.name, i.description, count(comment_id) as nb_comm, CONCAT('[', GROUP_CONCAT(CONCAT_WS('','{"color":"',

我在MySQL中得到了以下shema

表“项目

表“项目关系”

表“子项”

表“评论

因此,我希望通过SQL查询返回以下数据:

  • 项目编号
  • 名字
  • 描述
  • 评论数
  • JSON格式的子数据
下面是我正在做的,但JSON数据看起来是乘以行数、注释数或子行数

SELECT i.item_id, i.name, i.description, count(comment_id) as nb_comm,
CONCAT('[', GROUP_CONCAT(CONCAT_WS('','{"color":"', color, '", "weight":"', weight,'"}')), ']') as data
FROM items i
LEFT JOIN comments c ON c.parent_id = i.item_id
LEFT JOIN items_relations ir ON ir.item_id = i.item_id
LEFT JOIN children ch ON ir.child_id = ch.children_id
WHERE 1
数据场包含

[{"color":"blue", "weight":"5"},{"color":"blue", "weight":"5"},{"color":"red", "weight":"10"},{"color":"red", "weight":"10"}]
如何在数据字段中包含正确的内容


这是一个

您可以使用DISTINCT进行分组计数

SELECT i.item_id, i.name, i.description, count(distinct comment_id) as nb_comm,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT_WS('','{"color":"', color, '", "weight":"', weight,'"}')), ']') as data
FROM items i
LEFT JOIN comments c ON c.parent_id = i.item_id
LEFT JOIN items_relations ir ON ir.item_id = i.item_id
LEFT JOIN children ch ON ir.child_id = ch.children_id
GROUP BY i.item_id, i.name, i.description

您可以使用DISTINCT进行分组和计数

SELECT i.item_id, i.name, i.description, count(distinct comment_id) as nb_comm,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT_WS('','{"color":"', color, '", "weight":"', weight,'"}')), ']') as data
FROM items i
LEFT JOIN comments c ON c.parent_id = i.item_id
LEFT JOIN items_relations ir ON ir.item_id = i.item_id
LEFT JOIN children ch ON ir.child_id = ch.children_id
GROUP BY i.item_id, i.name, i.description

您正在运行哪个版本的MySQL?实际上是MariaDB 10.3您正在运行哪个版本的MySQL?实际上是MariaDB 10.3是的!这解决了数据问题,但评论的数量仍然是错误的。是的!这解决了数据问题,但评论的数量仍然是错误的。
SELECT i.item_id, i.name, i.description, count(comment_id) as nb_comm,
CONCAT('[', GROUP_CONCAT(CONCAT_WS('','{"color":"', color, '", "weight":"', weight,'"}')), ']') as data
FROM items i
LEFT JOIN comments c ON c.parent_id = i.item_id
LEFT JOIN items_relations ir ON ir.item_id = i.item_id
LEFT JOIN children ch ON ir.child_id = ch.children_id
WHERE 1
[{"color":"blue", "weight":"5"},{"color":"blue", "weight":"5"},{"color":"red", "weight":"10"},{"color":"red", "weight":"10"}]
SELECT i.item_id, i.name, i.description, count(distinct comment_id) as nb_comm,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT_WS('','{"color":"', color, '", "weight":"', weight,'"}')), ']') as data
FROM items i
LEFT JOIN comments c ON c.parent_id = i.item_id
LEFT JOIN items_relations ir ON ir.item_id = i.item_id
LEFT JOIN children ch ON ir.child_id = ch.children_id
GROUP BY i.item_id, i.name, i.description