在MYSQL / SQL中如何查询这种情况下的数据?

时间:2014-06-25 06:28:47

标签: php mysql sql

我正在开展网上商店项目。有两种或顺序,对于每种类型的订单,它们具有相同的状态,表结构是这样的

order_type_1
==============
id

order_type_2
==============
id

status
=============
id
status_code
order_type1_id (nullable)
order_type2_id (nullable)
create_date
  1. 我设计了状态表,因为这两个订单具有相同类型的status_code,但我不知道它是一个好的结构,我应该将它们分成两个不同的表吗?

  2. 状态代码就像那样,例如200订购300运费400完成,有没有办法得到所有的运输订单(300)?我曾想过使用Between,但事实并非如此,WHERE子句适用于行,但不适用于结果集。

  3. 感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您好我建议仅使用状态表作为参考。并添加订单类型参考表

    status
    =============
    id
    status_code

    order_type
    =============
    id
    order_code
    order_desc

然后有一个订单表

    order
    =============
    id
    order_type_id
    status_id

和查询

    select * from order o join status s on s.id = o.status_id where s.status_code = 300

编辑: 订单的多个状态的结构:

    order
    =============
    id
    order_type_id

    status
    =============
    id
    status_code

    order_status
    ============
    order_id
    status_id

    order_type
    =============
    id
    order_code
    order_desc

我们的想法是将status和order_type表保留为仅供参考,这意味着您不会对这些表执行插入操作。

对于查询,您可以使用:

 select * from order o join order_status os on os.order_id = o.id  join status s on os.status_id = s.id where s.status_code in (300,200,100)  

答案 1 :(得分:0)

如果订单只能有两种类型中的一种且只有一种状态,为什么不将订单ID,订单类型,订单状态作为表格?

要使用表格设计进行选择,请使用

SELECT * 
FROM status 
WHERE status_code=300;