【发布时间】:2014-11-07 09:21:19
【问题描述】:
我很难弄清楚这一点。如果答案就在那里,我深表歉意,我已经搜索了所有的 stackoverflow。
我有一个订购系统,我通过 tableID 订购,如果有人订购东西,我会继续在我的数据库中创建行。我的问题是将我的数据放在 1 行上,在这个例子中是表 ID,所以所有订购的东西,只显示在 1 行上。
我有 3 张桌子,食物、饮料、甜点,在我的 OrderTable 中都有一个外键。
id fk_tableid fk_drinkId fk_foodId fk_dessId 数量 1 5 2 0 0 2 2 5 0 1 0 1 3 5 0 2 0 1 4 5 0 0 2 2 11 8 1 0 0 2 21 1 1 0 0 5 22 1 0 1 0 9 23 1 0 0 1 2通过正常的选择,使用左连接,我可以在多行上获取数据,就像这样我得到那些 tableId 5 并显示订购消耗品的名称:
id fk_tableId fk_drinkId fk_foodId fk_dessId 数量 foodName 饮料名称 甜点名称 1 5 2 0 0 2 空 Sodavand 空 2 5 0 1 0 1 千层面 NULL NULL 3 5 0 2 0 1 比萨 NULL NULL 4 5 0 0 2 2 NULL NULL 软件我也尝试使用 group_concat,它将数据放在 1 行,但它似乎将所有内容放在 1 行,而不仅仅是按 tableId 分组。
我希望它是这样的(例如 2x Lasagne,这正是我希望它在网站上的样子,但也许我需要使用 1xLasagne 两次。用 1x Beer 看起来会很乱10 次。):
fk_tableId fk_drinkId fk_foodId fk_dessId foodName drinkName甜点名称 fulllPrice 5 2,2 1,2 2,2 比萨、千层面 2xSodavand 2xSoftice 195我知道我的问题格式可能有误,但我也很难 100% 知道在此处使用 Google 搜索和搜索什么。试了2天,还问我老师谁不行,他用CASES和sum()做了点什么,也没成功。
任何帮助将不胜感激!
更新:
添加 SQL 查询:
SELECT
menukort_ordre.id,
fk_tableId,
fk_drinkId,
fk_foodId,
fk_dessId,
amount,
menukort_food.name AS foodName,
menukort_drink.name AS drinkName,
menukort_dessert.name AS dessertName
FROM menukort_ordre
LEFT Join menukort_drink
ON (menukort_ordre.fk_drinkId = menukort_drink.id)
LEFT Join menukort_food
ON (menukort_ordre.fk_foodId = menukort_food.id)
LEFT Join menukort_dessert
ON (menukort_ordre.fk_dessId = menukort_dessert.id)
WHERE fk_tableid = fk_tableid
使用 GROUP_CONCAT 我尝试这样做,将其放在 1 行,但由于我的 WHERE,我将所有数据放在 1 行。
GROUP_CONCAT(menukort_food.name ) AS foodName,
GROUP_CONCAT(menukort_drink.name) AS drinkName,
GROUP_CONCAT(menukort_dessert.name) AS dessertName
【问题讨论】:
标签: select join mysqli group-by group-concat