如何从具有一对多关系的表中选择是一行结果

时间:2016-03-09 06:20:33

标签: php mysql

我有两张桌子:

餐厅

+---------------+----------------+
| restaurant_id | Restaurant name|
+---------------+----------------+
| 1             | KFC            |
| 2             | McD            |
+----+---------------------------+

+---------------+---------------+----------------+
| cuisine_id    | restaurant_id | cuisine        |
+---------------+---------------+----------------+
| 1             | 1             | Fastfood       |
| 2             | 1             | Fried Chicken  |
| 3             | 2             | Fastfood       |
| 4             | 2             | Burger         |
+---------------+---------------+----------------+

是否可以获得这样的数据=

+---------------+----------------+------------------------+
| restaurant_id | Restaurant name| Cuisine                |
+---------------+----------------+------------------------+
| 1             | KFC            |Fastfood, Fried Chicken |
| 2             | McD            |Fastfood, Burger        |
+----+---------------------------+------------------------+

只有一个查询? 或者我应该通过php(选择餐厅第一个> foreach循环>选择菜系ID>解析成新数组)。

3 个答案:

答案 0 :(得分:8)

您可以使用GROUP_CONCAT

SELECT r.restaurant_id, r.Restaurant_name,
       GROUP_CONCAT(c.cuisine ORDER BY c.cuisine)
FROM Restaurant AS r
LEFT JOIN Cuisine AS c ON r.restaurant_id = c.restaurant_id
GROUP BY  r.restaurant_id, r.Restaurant_name

注意: ORDER BY中的GROUP_CONCAT条款仅在您需要有序逗号分隔的cuisine名称列表时才有必要

答案 1 :(得分:0)

您可以使用GROUP_CONCAT:

SELECT c.restaurant_id,r.restaurant_name, GROUP_CONCAT(c.cuisine)
FROM Restaurant r
INNER JOIN Cuisine c ON c.restaurant_id = r.restaurant_id 
GROUP BY c.restaurant_id

答案 2 :(得分:0)

SELECT Restaurant.restaurant_id, Restaurant.Restaurant_name, GROUP_CONCAT(Cuisine.cuisine)
FROM Restaurant
LEFT JOIN Cuisine ON Restaurant.restaurant_id = Cuisine.restaurant_id
GROUP BY Restaurant.restaurant_id, Restaurant.Restaurant_name