我遇到的问题是有多个list_items.item_id(其中有两个)。似乎组concat只是将所有信息集中在一起,而不是将它们与父表的每一行混为一谈。这是我第一次使用GROUP_CONCAT的牛仔竞技表演。我希望解决的是每个父项都连接了连接信息。 任何帮助表示赞赏。
SELECT list_items.item_id, sub_cats.cat_name as subcatname,
main_cats.cat_name maincatname, main_title,fabric,other,care,item_main_cat,item_sub_cat,
GROUP_CONCAT(sub_id) as subidgrp,
GROUP_CONCAT(price) as pricegrp,
GROUP_CONCAT(item_size) as itemszgrp,
GROUP_CONCAT(item_color) as itmcolorgrp,
GROUP_CONCAT(img_name) as imgnmgrp,
GROUP_CONCAT(item_quantity) as itmqntygrp
from list_items LEFT JOIN item_size_etc ON
list_items.item_id = item_size_etc.parent_id LEFT JOIN main_cats on
list_items.item_main_cat=main_cats.cat_id LEFT JOIN sub_cats on
list_items.item_sub_cat=sub_cats.cat_id where list_items.active='Y'
答案 0 :(得分:3)
任何聚合函数(COUNT,SUM,MAX等)的默认行为是将整个表视为一个“组”。
要使每个组对应于给定列的不同值,换句话说,为每个项目获取小计,您需要添加GROUP BY子句。
例如,将其添加到查询的末尾:
...
GROUP BY list_items.item_id
答案 1 :(得分:3)
GROUP_CONCAT()
is an aggregate function,这意味着它希望GROUP BY
子句的存在能够正常运行。因为MySQL(与其他RDBMS不同)对GROUP BY
内容很宽松,所以您的查询在语法上是有效的,但不会产生正确的结果。
如果您只是添加GROUP BY list_items.item_id
,可能会获得所需的结果,但最好是列出SELECT
中GROUP BY
列表中的所有列。
SELECT
list_items.item_id,
sub_cats.cat_name as subcatname,
main_cats.cat_name maincatname,
main_title,
fabric,
other,
care,
item_main_cat,
item_sub_cat,
GROUP_CONCAT(sub_id) as subidgrp,
GROUP_CONCAT(price) as pricegrp,
GROUP_CONCAT(item_size) as itemszgrp,
GROUP_CONCAT(item_color) as itmcolorgrp,
GROUP_CONCAT(img_name) as imgnmgrp,
GROUP_CONCAT(item_quantity) as itmqntygrp
FROM
list_items
LEFT JOIN item_size_etc ON list_items.item_id = item_size_etc.parent_id
LEFT JOIN main_cats on list_items.item_main_cat=main_cats.cat_id
LEFT JOIN sub_cats on list_items.item_sub_cat=sub_cats.cat_id
WHERE list_items.active='Y'
GROUP BY
list_items.item_id,
sub_cats.cat_name as subcatname,
main_cats.cat_name maincatname,
main_title,
fabric,
other,
care,
item_main_cat,
item_sub_cat