在此先感谢,我似乎无法得到它!
我有两张桌子
Ordered_Item
ID | Item_Name 1 | Pizza 2 | Stromboli
Ordered_Options
Ordered_Item_ID | Option_Number | Value
1 43 Pepperoni
1 44 Extra Cheese
2 44 Extra Cheese
我想要输出的是一个mysql查询就是这个效果
产量
ID | Item_Name | Option_1 | Option_2 1 Pizza Pepperoni Extra Cheese 2 Stromboli NULL Extra Cheese
我尝试了很多以语法错误结尾的选项,我尝试过group_concat,但那并不是我想要的.我在下面有一个粗略的例子,我认为可能是一个开始.我每次都需要选项以相同的顺序.在收集信息的程序中,没有办法可靠地确保会发生这种情况.是否可以根据选项号将它们连接起来.此外,我知道我将永远不会有超过5个选项,所以静态解决方案将起作用
Select Ordered_Items.ID,
Ordered_Items.Item_Name,
FROM Ordered_Items
JOIN (SELECT Ordered_Options.Value FROM Ordered_Options Where Option_Number = 43) as Option_1
ON Ordered_Options.Ordered_Item_ID = Ordered_Item.ID
JOIN (SELECT Ordered_Options.Value FROM Ordered_Options Where Option_Number = 44) as Option_2
ON Ordered_Options.Ordered_Item_ID = Ordered_Item.ID;
Run Code Online (Sandbox Code Playgroud)
谢谢!乔
Wou*_*ick 109
最简单的方法是在这里使用GROUP_CONCAT组功能.
select
ordered_item.id as `Id`,
ordered_item.Item_Name as `ItemName`,
GROUP_CONCAT(Ordered_Options.Value) as `Options`
from
ordered_item,
ordered_options
where
ordered_item.id=ordered_options.ordered_item_id
group by
ordered_item.id
Run Code Online (Sandbox Code Playgroud)
哪个会输出:
Id ItemName Options
1 Pizza Pepperoni,Extra Cheese
2 Stromboli Extra Cheese
Run Code Online (Sandbox Code Playgroud)
这样,您可以拥有任意数量的选项,而无需修改查询.
啊,如果你看到你的结果被裁剪,你可以像这样增加GROUP_CONCAT的大小限制:
SET SESSION group_concat_max_len = 8192;
Run Code Online (Sandbox Code Playgroud)
小智 11
我很感激帮助,我认为如果有人评论我会感激的有效性,我会找到解决方案.基本上我做的是.我意识到它的实现有点静态,但我做了我需要它做的事情(原谅不正确的语法)
SELECT
ordered_item.id as `Id`,
ordered_item.Item_Name as `ItemName`,
Options1.Value
Options2.Value
FROM ORDERED_ITEMS
LEFT JOIN (Ordered_Options as Options1)
ON (Options1.Ordered_Item.ID = Ordered_Options.Ordered_Item_ID
AND Options1.Option_Number = 43)
LEFT JOIN (Ordered_Options as Options2)
ON (Options2.Ordered_Item.ID = Ordered_Options.Ordered_Item_ID
AND Options2.Option_Number = 44);
Run Code Online (Sandbox Code Playgroud)
如果您的结果中确实需要多列,并且选项数量有限,您甚至可以这样做:
select
ordered_item.id as `Id`,
ordered_item.Item_Name as `ItemName`,
if(ordered_options.id=1,Ordered_Options.Value,null) as `Option1`,
if(ordered_options.id=2,Ordered_Options.Value,null) as `Option2`,
if(ordered_options.id=43,Ordered_Options.Value,null) as `Option43`,
if(ordered_options.id=44,Ordered_Options.Value,null) as `Option44`,
GROUP_CONCAT(if(ordered_options.id not in (1,2,43,44),Ordered_Options.Value,null)) as `OtherOptions`
from
ordered_item,
ordered_options
where
ordered_item.id=ordered_options.ordered_item_id
group by
ordered_item.id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107430 次 |
| 最近记录: |