Mysql 如何使用SQL从多值属性中的最高值到最低值排序?

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

我使用的是MySQL,餐厅菜单有两张桌子,叫做:

  • 项目(项目代码、项目名称、价格、项目类型、位置、备注)
  • 订单(订单代码、项目代码、成分代码)
  • '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!现在它更符合逻辑了。