连接多个关系表
join multiple relation tables
我有 table 食物
food_id food_name
1 chappathi
和另一个 table 类别
category_id category_name
1 non-veg
2 nutrition
和关系 table food_category
food_id category_id
1 1
1 2
其中food_id是foodtable中food_id的外键,category_id是category_id中foriegn_key的外键category table, 没有食物类别的情况
我试过了
$sql= "SELECT * FROM food f
LEFT JOIN food_category fc
ON f.food_id=fc.food_id
LEFT JOIN category c
ON fc.category_id=c.category_id"
它给了我不止一种食物,我想要的是
item name: chappathi
categories: non-veg, nutrition
------------------------------
second row of result set if there is any
你需要的是group_concat:
SELECT f.food_name, group_concat(c.category_name) AS Cat
FROM food AS f
LEFT JOIN food_category AS fc ON f.food_id = fc.food_id
LEFT JOIN category AS c ON c.category_id = fc.category_id
GROUP BY f.food_id
同意@strawberry。看看group_concat。
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
试试这个:
SELECT f.food_name AS item_name, GROUP_CONCAT(c.category_name SEPARATOR ', ') AS categories
FROM food f
LEFT JOIN food_category fc ON f.food_id=fc.food_id
LEFT JOIN category c ON fc.category_id=c.category_id
GROUP BY f.id
希望对您有所帮助。
查询应该像下面这样写,以获取食物名称及其类别列表。
SELECT f.food_name as ItemName,
STUFF(
(SELECT DISTINCT ',' + c.category_name
FROM food
LEFT JOIN food_category fc on fc.food_id= food.food_id
LEFT JOIN category c ON fc.category_id =c.category_id
FOR XML PATH ('')), 1, 1, '') AS Categories
FROM food f
group by f.food_id, f.food_name
请查收。
我有 table 食物
food_id food_name
1 chappathi
和另一个 table 类别
category_id category_name
1 non-veg
2 nutrition
和关系 table food_category
food_id category_id
1 1
1 2
其中food_id是foodtable中food_id的外键,category_id是category_id中foriegn_key的外键category table, 没有食物类别的情况 我试过了
$sql= "SELECT * FROM food f
LEFT JOIN food_category fc
ON f.food_id=fc.food_id
LEFT JOIN category c
ON fc.category_id=c.category_id"
它给了我不止一种食物,我想要的是
item name: chappathi
categories: non-veg, nutrition
------------------------------
second row of result set if there is any
你需要的是group_concat:
SELECT f.food_name, group_concat(c.category_name) AS Cat
FROM food AS f
LEFT JOIN food_category AS fc ON f.food_id = fc.food_id
LEFT JOIN category AS c ON c.category_id = fc.category_id
GROUP BY f.food_id
同意@strawberry。看看group_concat。
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
试试这个:
SELECT f.food_name AS item_name, GROUP_CONCAT(c.category_name SEPARATOR ', ') AS categories
FROM food f
LEFT JOIN food_category fc ON f.food_id=fc.food_id
LEFT JOIN category c ON fc.category_id=c.category_id
GROUP BY f.id
希望对您有所帮助。
查询应该像下面这样写,以获取食物名称及其类别列表。
SELECT f.food_name as ItemName,
STUFF(
(SELECT DISTINCT ',' + c.category_name
FROM food
LEFT JOIN food_category fc on fc.food_id= food.food_id
LEFT JOIN category c ON fc.category_id =c.category_id
FOR XML PATH ('')), 1, 1, '') AS Categories
FROM food f
group by f.food_id, f.food_name
请查收。