选择时优先考虑某些领域

时间:2012-02-15 16:10:14

标签: mysql sql

所以,假设我有这些字段

+----------+-------+---------+
| username | email | online  |
+----------+-------+---------+

现在我想运行此查询,

SELECT * FROM users LIMIT 20,非常简单,但我想首先选择online字段值为1的字段,然后选择所有其余字段

所以,如果我有这些记录:

user1,   email@email, 0
user2,   email@email, 1
user3,   email@email, 0
user4,   email@email, 1

选择后我应该

user2,   email@email, 1
user4,   email@email, 1
user1,   email@email, 0
user3,   email@email, 0

我知道我可以用php完成这项工作,但如果mysql可以为我做这件事,这将是额外的工作。

4 个答案:

答案 0 :(得分:5)

非常简单,只需按顺序排序“在线”列。

select * from users order by online DESC LIMIT 20

答案 1 :(得分:3)

SELECT * FROM users
ORDER BY online DESC,username LIMIT 20;

您可能还想添加此索引

ALTER TABLE users ADD INDEX online_username_ndx (online,username);

如果除0和1之外还有其他在线值,则执行以下操作:

SELECT * FROM users
ORDER BY IF(online=1,0,1),username LIMIT 20;

答案 2 :(得分:2)

SELECT * FROM users ORDER BY online DESC, username LIMIT 20

答案 3 :(得分:2)

为什么你只能添加一个ORDER BY子句?

order by online DESC LIMIT 20