SQL根据条件从两列中按值排序

时间:2016-01-30 17:31:25

标签: mysql sql

我有一张表,其中包含属于某些catergory的条目。每个条目都有一个ID(e_ID),每个类别都有一个ID(c_ID),还有一列用于定义包含由数字表示的自定义顺序的内容(sort1)的顺序。

现在添加了第二个可选类别。如果那个aplies,则排序编号进入一个新的(sort2)列,这样主要的catergory的顺序就不会被覆盖。

我曾经使用过ORDER BY sort1,但是如果当前的主要类别是curent catergory,那么现在需要sort1;如果是次要的catergory,则需要sort2。属于同一类别的所有条目应由用户排序,因此数据存储在两列中。我可以在订单声明中以这种方式使用它们吗?

e_ID    c_ID    c2_ID   sort1   sort2
1       7       3       1       27
2       3       7       37      3
3       7       -       2       -
4       2       4       99      81

expected order 1,3,2 for categroy 7

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找这个:

select t.*
from t
order by coalesce(c2_id, c_id), -- put similar categories together
         coalesce(sort2, sort1) -- order according to your priority

如果您想限制特定类别,请添加:

where coalesce(c2_id, c_id) = 7

答案 1 :(得分:1)

如果我理解你想要什么,那么以下内容应该有效:

SELECT * FROM my_table
    WHERE c_ID = 7
    ORDER BY sort1
UNION
SELECT * FROM my_table
    WHERE c2_ID = 7
    ORDER BY sort2

如果您不熟悉UNION - 它只会将两个选项合并为一个