1

我遇到的问题是 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'  
4

2 回答 2

3

任何聚合函数(COUNT、SUM、MAX 等)的默认行为是将整个表视为一个“组”。

要使每个组对应于给定列的不同值,换句话说,要获取每个项目的小计,您需要添加一个 GROUP BY 子句。

例如,将此添加到查询的末尾:

...
GROUP BY list_items.item_id
于 2013-01-23T20:53:10.950 回答
3

GROUP_CONCAT()是一个聚合函数,这意味着它期望子句的存在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
于 2013-01-23T20:53:16.877 回答