我在MySQL 5.6+数据库中有以下表格
+----+-------+-------+--------------+--------------+
| 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 |
+----+-------+-------+--------------+--------------+
我需要选择
行(`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都是满足我需求的有效排序,以防万一使解决方案更容易。
答案 0 :(得分:1)
MySQL可以order by
任意表达式,例如
ORDER BY (foo = bar)
布尔结果将是整数0
或1
的类型转换,所以如果你想要所有的&#34;等于&#34;首先是值(1
),然后是
ORDER BY (foo = bar) DESC
如果你想要所有的假(0
)值,那么
ORDER BY (foo = bar) ASC
答案 1 :(得分:1)
如果您使用CASE
表达式ORDER BY
ORDER BY
CASE
WHEN (`mood1_visual`='5c' AND `mood2_visual`='7a') THEN id
END