Mysql“;或;按条件顺序查询获取行

Mysql“;或;按条件顺序查询获取行,mysql,Mysql,我有一个mysql查询: SELECT * FROM `mytable` WHERE (condition 1) OR (condition 2) OR (condition3) 我可以让这个查询显示条件1中的行,然后是条件2中的行,最后是条件3中的行吗 我通过使用UNION实现了这一点,它确实有效,但速度较慢(在我的mysql上测试了该查询)——实际上,如果没有重复项,它比“或”查询快,但是如果有重复项,则速度要慢得多 泰 一种方法是使用UNION ALL,就像您所做的那样。为了避免重复,可

我有一个mysql查询:

SELECT * FROM `mytable` WHERE (condition 1) OR (condition 2) OR (condition3)
我可以让这个查询显示条件1中的行,然后是条件2中的行,最后是条件3中的行吗

我通过使用UNION实现了这一点,它确实有效,但速度较慢(在我的mysql上测试了该查询)——实际上,如果没有重复项,它比“或”查询快,但是如果有重复项,则速度要慢得多


一种方法是使用
UNION ALL
,就像您所做的那样。为了避免重复,可以使用

SELECT * FROM `mytable` WHERE (condition 1)
UNION ALL
SELECT * FROM `mytable` WHERE (condition 2) AND NOT (condition 1)
UNION ALL
SELECT * FROM `mytable` WHERE (condition 3) AND NOT (condition 1 OR condition 2)

但它可能仍然会很慢。

我认为您可以使用
按顺序来实现这一点。
试试这个:

SELECT * FROM `mytable` WHERE (condition 1) OR (condition 2) OR (condition3) ORDER BY ((condition 1) * 4 + (condition 2) * 2 + condition 1) DESC; 从“mytable”中选择*,其中(条件1)或(条件2)或(条件3) 订货人((条件1)*4+(条件2)*2+条件1)说明; 编辑: 事实上,您基本上是在构建一个3位数字并使用它进行排序。 想象一下这个真理表:

C1 | C2 | C3 |结果 0 | 0 | 0 | 0 0 | 0 | 1 | 1 0 | 1 | 0 | 2 0 | 1 | 1 | 3 1 | 0 | 0 | 4 1 | 0 | 1 | 5 1 | 1 | 0 | 6 1 | 1 | 1 | 7
如果您按结果描述(从下到上)排序,实际上您是先按C1排序,然后按false排序,再按C2排序,如果false排序,再按C3排序。

不确定这是否适用于您:

SELECT * FROM `mytable` WHERE (condition 1) OR (condition 2) OR (condition3)
ORDER BY CASE WHEN condition=1 THEN 1 
         CASE WHEN condition=2 THEN 2
         CASE WHEN condition=3 THEN 3
         END

试着按条款顺序使用CASE你可以按条件顺序1和/或使用CASE非常有趣,ty!我将测试它,看看它是否比联合查询快。我不确定我能理解,你能给我一个mysql引用吗?看我的编辑,这不是mysql依赖,这是二进制字符串操作。
SELECT * FROM `mytable` WHERE (condition 1) OR (condition 2) OR (condition3)
ORDER BY CASE WHEN condition=1 THEN 1 
         CASE WHEN condition=2 THEN 2
         CASE WHEN condition=3 THEN 3
         END