通过外键mysql排序同一表

时间:2018-10-08 08:07:47

标签: php mysql sql-order-by

我有一个表(表顺序),外键索引到同一张表,每个顺序还有许多其他顺序:

 order             
 ---------- 
 id_order
 state
 id_source

id_source是一个外键,已在同一张表中替换为id_order

我要选择按订单状态及其订单排序的所有行。

我尝试了这段代码,但没有给我我想要的东西。

  select * from order o left join order o2 ON(o.id_order = o2.id_source)
  order by o.state , o2.state asc ; 

例如:

 id_order  |   state  |   id_source 
 -----------------------------------
     1     |     1    |     null
 -----------------------------------
     2     |     2    |     null  
 -----------------------------------
     3     |     3    |     null
 -----------------------------------
     4     |     1     |    3

我想要的结果

   id_order  |   state  |   id_source 
 -----------------------------------
     1       |     1    |     null
 -----------------------------------
     3       |     3    |     null
 -----------------------------------
     4       |     1    |    3
 -----------------------------------
     2       |     2    |     null  

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您希望对订单使用条件语句,这可以通过以下方式进行:

select * 
from order o 
left join order o2 ON(o.id_order = o2.id_source)
order by if(id_source is null, o.state, o2.state) asc;