我正在使用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
答案 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&值。