连接多个关系表

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

请查收。