Php 连接多个关系表

Php 连接多个关系表,php,mysql,join,left-join,Php,Mysql,Join,Left Join,我有一桌食物 food_id food_name 1 chappathi 和另一个表类别 category_id category_name 1 non-veg 2 nutrition 和一个关系表food_category food_id category_id 1 1 1 2 如果食品id是食品表中食品id的外键,类别id是类别表

我有一桌食物

food_id     food_name  

  1           chappathi
和另一个表类别

category_id    category_name

  1              non-veg
  2              nutrition
和一个关系表food_category

food_id    category_id

  1          1
  1          2
如果食品id是食品表中食品id的外键,类别id是类别表中类别id的外键,将不存在食品类别的情况 我试过了

 $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

您需要的是团队合作:

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

同意@草莓。请看第二组

试试这个:

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

请查看。

您的结果预期是什么?因为我可以看出您的查询是正确的,它将为您提供多条记录。因为它在food_category table中有两个关联的类别。如果结果表中有任何类别,我只想要id为1的食物项,我想将其作为数组或其他东西提取到食物项1,因此我可以将其显示为chappathi with nutriention和non-veg category@Siduy。您的问题非常清楚,格式也很好。如果您将预期结果添加到您的问题中会更容易。我已经添加了@SIDU
GROUP BY 1,2
,它非常特定于表的当前内容。您应该始终按列名分组;查看与您的MySQL服务器版本对应的手册,以了解第1行的“group_concat(c.category_name)AS Cat FROM food AS f LEFT JOIN food_categ”附近使用的正确语法@SIDU@Ranjith我用我的进行了测试,没有错误,你的真实情况有任何列名错误吗?谢谢大家回答@all