首页 > 解决方案 > 在单个查询中检索多级数据 - MySQL Group Concat

问题描述

我在一个表中有一个多级数据,如下所示。

父母 组织 物品 价格 dsc1
1 1 苹果
2 1 1 苹果手机 1000 美元 (描述)
3 1 2 1 iPhone 加 1200 美元 (描述)
4 1 1 iMac 基础版 600 美元 (描述)
5 1 4 1 iMac 1TB 900 美元 (描述)

所需的输出是基本产品级别(不是 null parent + null sub),它必须包含顶级类别以及所有子品种和描述:

Apple $1000 iPhone $1200 iPhone Plus (Description)
Apple $600 iMac Basic $900 iMac 1TB (Description)

我正在尝试使用 SQL 做所有可能的事情,但我无法将所有内容合并到一个查询中——我不想先检查类别,然后再对单个产品进行查询。

SELECT *, IF(parent IS NULL, item, mid) AS topcategory FROM table where org = "1";

我也在尝试使用 GROUP_CONCAT 没有任何运气: https://phpize.online/?phpses=5c149faca3e15d3bcd7f4c0e437c28ff&sqlses=c40160db7e24f450d3055397db86aeda&php_version=php8&sql_version=mysql57

标签: phpmysql

解决方案


我的意思是你可以使用下一个查询:

SELECT 
    `parent`.`item` `parent`,
    `sub`.`item` `sub`,
    `sub`.`price` `sub_price`,
    `menu`.`item` `menu`,
    `menu`.`price` `menu_price`,
    `menu`.`dsc1`
FROM `menu`
JOIN `menu` `sub` on `sub`.`mid` = `menu`.`sub`
JOIN `menu` `parent` on `parent`.`mid` = `menu`.`org`;

MySQL小提琴

结果

+========+=========+===========+=============+============+======+
| parent | sub     | sub_price | menu        | menu_price | dsc1 |
+========+=========+===========+=============+============+======+
| Apple  | iPhone  | $1000     | iPhone Plus | $1221      | (HI) |
+--------+---------+-----------+-------------+------------+------+
| Apple  | iPhone  | $1000     | iPhone Red  | $1600      | (HI) |
+--------+---------+-----------+-------------+------------+------+

推荐阅读