SQL在Query中组合行

时间:2012-02-17 16:29:49

标签: mysql sql

我正在使用MySQL数据库,我正在尝试合并我的结果。我的SQL Chops经验不足以想出办法来实现这一目标。

图片解释了我的目标和数据库结构。 http://i.stack.imgur.com/x6dCo.png

这就是我正在使用的:

SELECT
      LISTITEMS.ID,
      LISTITEMS.ItemName,
      PROPVALUE.PropValue,
      LISTPROPERTIES.PropName
FROM LISTITEMS
INNER JOIN PROPVALUE
   ON LISTITEMS.ID = PROPVALUE.ItemID
INNER JOIN LISTPROPERTIES
   ON LISTPROPERTIES.ID = PROPVALUE.PropID
WHERE LISTITEMS.ListID = '$_GET[ID]'

这返回2行,我需要1行(我从其他2个表中删除了'ID'列。)

ID  ItemName  PropValue    ListID       PropName
1   item 1    PropValue1        1       Property1
1   item 1    PropValue2        1       Property2

修改所需的输出:

ID  ListID ItemName  PropName1 PropValue1   PropName2 PropValue2
1   1      Item 1    Property1 PropValue1   Property2 PropValue2

1 个答案:

答案 0 :(得分:3)

由于属性名称会动态不同,因此在GROUP_CONCAT()中将它们组合起来然后在应用程序层中将它们分开会更容易:

修改:修正了查询以包含您的所有JOIN

SELECT
      LISTITEMS.ID,
      LISTITEMS.ItemName,
      GROUP_CONCAT(CONCAT_WS('|', LISTPROPERTIES.PropName, PROPVALUE.PropValue)) AS Properties
FROM LISTITEMS
INNER JOIN PROPVALUE
   ON LISTITEMS.ID = PROPVALUE.ItemID
INNER JOIN LISTPROPERTIES
   ON LISTPROPERTIES.ID = PROPVALUE.PropID
WHERE LISTITEMS.ListID = '$_GET[ID]'
GROUP BY LISTITEMS.ID, LISTITEMS.ItemName

这将输出如下内容:

ID ItemName  Properties
1  Item1     Property1|PropValue1,Property2|PropValue2,Property3|PropValue3

然后在您的PHP代码中explode()首先在,上获取属性以获取对,然后在explode()上的每个|获取name|value } key&值。