我正在使用 MySQL 数据库,并且正在尝试合并我的结果。我的 SQL Chops 经验不足,无法找到实现此目的的方法。
图片解释了我的目标和数据库结构。 /image/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
最佳答案
由于属性名称会动态变化,因此将它们组合在 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
键和值。
关于mysql - SQL 组合查询中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331960/