我有这样的表格:
table A
id name email
1 test1 ex@ex.com
2 test2 ex@ex.com
3 test3 ex@ex.com
4 test4 ....
5 test5 ....
table B
id catA catB year member
1 false true 2011 2
2 true false 2011 3
3 fals true 2010 5
我想获取表 A 中的每一行并按以下方式对其进行排序:
FIRST, get user 2 (current year, based on table B)
SECOND, get user 3 (current year, based on table B)
after that get users that is in table B
after that get all other users.
我知道我可以有特定的 sql 来获取前两个用户,而只是 休息。但是我不应该通过一个很好的 ORDER by statement 来获得它们吗?就像限制第一个订单语句只影响第一行......
最佳答案
是这样的吗?
select A.id, A.name, A.email, B.catA, B.catB, B.year
from A
join B on A.id = B.member
ORDER BY B.year DESC, (B.member IS NOT NULL) DESC
首先按表 B 中的年份字段对所有结果进行排序,这会得到 2011 年、2010 年等...任何未在表 B 中列出的成员都将具有空年份并排序到列表底部。接下来按 B.member 不为 null 排序 - mysql 会将此 bool 结果强制为整数 1 或 0,可以对其进行排序,因此降序排序以使所有 1(非空 B.members)首先排序。
关于mysql - SQL - 按语句排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934026/