mysql - SQL 组合查询中的行

标签 mysql sql

我正在使用 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/

相关文章:

MySQL修剪(连接...)

mysql - 如何在字符串中匹配下划线 - MYSQL

MySQL 查询 : Counting duplicate values in a really huge table

mysql - SQL 子查询中的多个结果

sql - 哪些索引有助于加快查询速度?

MySQL数据库设计-存储图像-单表或多表

mysql - 使用 SQL 按不同方向对评论和回复进行排序

mysql - SQL:获取唯一日期的所有点击(时间戳)

sql - 在 select 子句中使用子查询

sql - 在 Excel VBA 中使用 SQL 记录集填充多列列表框