ORDER BY 第一个 OR 条件为真
ORDER BY first OR condition true
我在 MySQL 5.6+ 数据库中有以下 table
+----+-------+-------+--------------+--------------+
| id | mood1 | mood2 | mood1_visual | mood2_visual |
+----+-------+-------+--------------+--------------+
| 1 | 5 | 7 | 5c | 7a |
| 2 | 5 | 7 | 5b | 7b |
| 3 | 5 | 7 | 5c | 7d |
| 4 | 5 | 8 | 5a | 8a |
| 5 | 5 | 7 | 5c | 7a |
| 6 | 5 | 8 | 5b | 8a |
+----+-------+-------+--------------+--------------+
我需要 select 行,其中
(`mood1_visual`='5c' AND `mood2_visual`='7a') OR
(`mood1`=5 AND `mood2`=7 AND (`mood1_visual`<>'5c' OR `mood2_visual`<>'7a'))
在上面的示例中,这些将是第 1、2、3 和 5 行。但是我需要将它们与匹配 WHERE
子句的第一部分的那些排在其他之前,即我需要它们排序为 1,5,2,3,因为第 1 行和第 5 行满足 WHERE
子句
的第一部分
(`mood1_visual`='5c' AND `mood2_visual`='7a')
如何在 ORDER BY
子句中说明这一点?有没有类似的
ORDER BY THE ONES THAT MATCH CONDITION FIRST THEN THE OTHERS ?
请注意,5,1,2,3 或 1,5,3,2 或 5,1,3,2 都是满足我需要的有效排序,以防万一使解决方案更容易。
MySQL可以order by
任意表达式,例如
ORDER BY (foo = bar)
其布尔结果将被类型转换为整数 0
或 1
,因此如果您首先想要所有 "equal" 值 (1
),然后
ORDER BY (foo = bar) DESC
如果您首先想要所有错误 (0
) 值,那么
ORDER BY (foo = bar) ASC
如果将 CASE
表达式与 ORDER BY
一起使用会怎么样
ORDER BY
CASE
WHEN (`mood1_visual`='5c' AND `mood2_visual`='7a') THEN id
END
我在 MySQL 5.6+ 数据库中有以下 table
+----+-------+-------+--------------+--------------+
| id | mood1 | mood2 | mood1_visual | mood2_visual |
+----+-------+-------+--------------+--------------+
| 1 | 5 | 7 | 5c | 7a |
| 2 | 5 | 7 | 5b | 7b |
| 3 | 5 | 7 | 5c | 7d |
| 4 | 5 | 8 | 5a | 8a |
| 5 | 5 | 7 | 5c | 7a |
| 6 | 5 | 8 | 5b | 8a |
+----+-------+-------+--------------+--------------+
我需要 select 行,其中
(`mood1_visual`='5c' AND `mood2_visual`='7a') OR
(`mood1`=5 AND `mood2`=7 AND (`mood1_visual`<>'5c' OR `mood2_visual`<>'7a'))
在上面的示例中,这些将是第 1、2、3 和 5 行。但是我需要将它们与匹配 WHERE
子句的第一部分的那些排在其他之前,即我需要它们排序为 1,5,2,3,因为第 1 行和第 5 行满足 WHERE
子句
(`mood1_visual`='5c' AND `mood2_visual`='7a')
如何在 ORDER BY
子句中说明这一点?有没有类似的
ORDER BY THE ONES THAT MATCH CONDITION FIRST THEN THE OTHERS ?
请注意,5,1,2,3 或 1,5,3,2 或 5,1,3,2 都是满足我需要的有效排序,以防万一使解决方案更容易。
MySQL可以order by
任意表达式,例如
ORDER BY (foo = bar)
其布尔结果将被类型转换为整数 0
或 1
,因此如果您首先想要所有 "equal" 值 (1
),然后
ORDER BY (foo = bar) DESC
如果您首先想要所有错误 (0
) 值,那么
ORDER BY (foo = bar) ASC
如果将 CASE
表达式与 ORDER BY
一起使用会怎么样
ORDER BY
CASE
WHEN (`mood1_visual`='5c' AND `mood2_visual`='7a') THEN id
END