Mysql 如何使用SQL从多值属性中的最高值到最低值排序?
我使用的是MySQL,餐厅菜单有两张桌子,叫做:Mysql 如何使用SQL从多值属性中的最高值到最低值排序?,mysql,sql,sorting,database-schema,Mysql,Sql,Sorting,Database Schema,我使用的是MySQL,餐厅菜单有两张桌子,叫做: 项目(项目代码、项目名称、价格、项目类型、位置、备注) 订单(订单代码、项目代码、成分代码) 'Order'表中的属性'Item\u code'是多值的 如何编写SQL查询以按出现顺序(从'order'表中的最高到最低)显示项目代码和项目名称(从'item'表中) 谢谢你的帮助,谢谢 样本数据: 项目表: (Item_Code, Item_Name, Price, Item_Type, Location, Notes) 'I001' 'Chic
项目(项目代码、项目名称、价格、项目类型、位置、备注)
订单(订单代码、项目代码、成分代码)
'Order'
表中的属性'Item\u code'
是多值的
如何编写SQL查询以按出现顺序(从'order'
表中的最高到最低)显示项目代码和项目名称(从'item'表中)
谢谢你的帮助,谢谢
样本数据:
项目表:
(Item_Code, Item_Name, Price, Item_Type, Location, Notes)
'I001' 'Chicken Rice' '7.00' 'Main Course' 'Kitchen' 'Non-vegetarian'
'I002' 'French Fries' '3.00' 'Appetiser' 'Kitchen' 'Vegetarian'
'I003' 'Iced Lemon Tea' '2.00' 'Beverage' 'Bar' 'Non-Alcoholic'
'I004' 'Fish and Chips' '8.00' 'Main Course' 'Kitchen' 'Halal'
'I005' 'Vanilla Ice Cream' '4.00' 'Dessert' 'Kitchen' 'NA'
Order_Code, Item_Code, Ingredient_Code
'O222221', 'I001 I002', 'NA'
'O222222', 'I001 I003', 'AI03'
'O222223', 'I004 I005 I001', 'AI01'
'O222224', 'I002 I002 I004', 'AI04'
'O222225', 'I001 I002 I003', 'AI05'
订单表:
(Item_Code, Item_Name, Price, Item_Type, Location, Notes)
'I001' 'Chicken Rice' '7.00' 'Main Course' 'Kitchen' 'Non-vegetarian'
'I002' 'French Fries' '3.00' 'Appetiser' 'Kitchen' 'Vegetarian'
'I003' 'Iced Lemon Tea' '2.00' 'Beverage' 'Bar' 'Non-Alcoholic'
'I004' 'Fish and Chips' '8.00' 'Main Course' 'Kitchen' 'Halal'
'I005' 'Vanilla Ice Cream' '4.00' 'Dessert' 'Kitchen' 'NA'
Order_Code, Item_Code, Ingredient_Code
'O222221', 'I001 I002', 'NA'
'O222222', 'I001 I003', 'AI03'
'O222223', 'I004 I005 I001', 'AI01'
'O222224', 'I002 I002 I004', 'AI04'
'O222225', 'I001 I002 I003', 'AI05'
您的数据布局非常糟糕。您应该有第三个表,OrderItems
,该表中每个订单和订单中的项目都有一行
您可以使用字符串操作来做您想做的事情。不幸的是,您无法利用索引和其他数据库优化
select i.item_code, count(*) as cnt
from orders o join
items i
on concat(' ', o.item_code, ' ') like concat('% ', i.item_code, ' %')
group by i.item_code
order by count(*) desc;
编辑:
您可以通过运行与上述查询非常类似的查询来创建OrderItems
表:
select o.order_id, i.item_code
from orders o join
items i
on concat(' ', o.item_code, ' ') like concat('% ', i.item_code, ' %');
然后将其插入新表或使用创建表为请显示示例数据和预期输出“多值”是什么意思?请提供一些示例数据以及您想要的结果。通过多值,我的意思是Order表中的“Item_Code”可以有许多值。谢谢Gordon。有没有方法使用SQL为OrderItems创建第三个表?非常感谢Gordon!现在它更符合逻辑了。