假设我有2张桌子
在第一个表格中,我有以下字段:
STRUCTURE for `FRUITS`
`id` - int
`name` - varchar
ROWS in `FRUITS`
1 | apples
2 | grapes
在第二张表中,我有:
STRUCTURE for `COLORS`
`id` - int
`id_fruit` - int
`name` - varchar
ROWS in `COLORS`
1 | 1 | red
2 | 1 | green
3 | 1 | yellow
4 | 2 | purple
5 | 2 | green
在单个查询中,我希望它输出如下结果:
APPLES (#1)
- red (#1)
- green (#2)
- yellow (#3)
GRAPES (#2)
- purple (#4)
- green (#5)
基本上我只是在1个表中按行分组,然后从另一个表中输出所有行,并按行分组ID。
答案 0 :(得分:1)
这样的事情可能会:
SELECT
`name`
FROM (
SELECT
`id_fruit`,
`id` AS `id_color`,
CONCAT('- ', `name`) AS `name`
FROM `COLORS`
UNION ALL
SELECT
`id`,
0,
`name`
FROM `FRUITS`
) s
ORDER BY
`id_fruit`,
`id_color`
水果名称和颜色名称组合在一起。颜色名称的`id`
值为`id_color`
,水果名称的虚拟`id_color`
值为0
。这样,当按`id_fruit`, `id_color`
排序时,水果总是出现在各自的颜色之前。此外,在颜色名称之前附加了“项目符号”('- '
)。
答案 1 :(得分:0)
Select f.id,f.name, group_concat(c.name SEPARATOR ',') as colors from FRUITS f LEFT JOIN COLORS c on f.id=c.id_fruit group by f.id;
然后
$colors = explode(',', $row->colors);