GROUP CONCATenate多行

时间:2012-12-31 10:54:07

标签: mysql sql select group-concat

我使用的是MySQL 5.1.66,我想出了一个精选查询来选择所有男士衬衫及其尺寸和价格。我使用GROUP CONCAT将其父表中的size列和price列合并到同一列中。这是我发表的声明

SELECT shirts.shirt_name, shirts.men AS main_photo, 
       GROUP_CONCAT(shirt_sizes.size_name,shirt_prices.price) AS sizes
FROM shirts 
JOIN shirts_link ON shirts_link.shirt_id=shirts.id
JOIN shirt_sizes ON shirt_sizes.id=shirts_link.size_id
JOIN shirt_prices ON shirt_prices.id=shirts_link.price_id
WHERE shirts.men!='' AND shirts_link.adult='y'
GROUP BY shirts.id

通过这样做,size列和price列是否仍然是select语句中一列中的两个独立实体?我注意到的另一件事是尺寸的顺序都混淆了。例如,这是来自其中一列的行

medium29.22,large29.22,1x-large29.22,2x-large30.44,small29.22,3x-large31.70

为什么它不会像小桌子那样组织起来?我想象一下,如果要通过PHP将其注入我们的网站,我会尝试做什么,如果它是自动加载它也会以无组织的方式进行。我该如何解决这个问题?

我的最终目标是能够创建一个选项,可以自动将每一行填充到我创建的javascript应用程序中。我需要加载衬衫名称,主图片,然后每个尺寸和价格到我为他们编码的div。如果您需要查看正在使用的实际表,请告诉我。在此先感谢:)

2 个答案:

答案 0 :(得分:1)

group_concat函数的首要目的是将特定列的所有值保留在分组操作中。例如,

Table1
ID   field1    field2
1     ram      science
2     ramesh   maths
1     ram      maths

如果您的要求是获得特定人的主题,那么GROUP_CONCAT将产生如下结果,

ID  field1   field3
1   ram      science,maths
2   ramesh   maths

希望这能提供一些见解

答案 1 :(得分:0)

试试这个:

SELECT s.shirt_name, s.men AS main_photo, 
       GROUP_CONCAT(CONCAT(ss.size_name, '.', sp.price)) AS sizes
FROM shirts s 
INNER JOIN shirts_link sl ON sl.shirt_id = s.id
INNER JOIN shirt_sizes ss ON ss.id = sl.size_id
INNER JOIN shirt_prices sp ON sp.id = sl.price_id
WHERE s.men!='' AND sl.adult='y'
GROUP BY s.id