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