Отдавать приоритет некоторым полям при выборе - PullRequest
0 голосов
/ 15 февраля 2012

Итак, скажем, у меня есть эти поля

+----------+-------+---------+
| 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 ]

5 голосов
/ 15 февраля 2012

Довольно просто, просто закажите по нему столбец «онлайн» в порядке убывания.

select * from users order by online DESC LIMIT 20
3 голосов
/ 15 февраля 2012
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 голосов
/ 15 февраля 2012

почему вы не можете просто добавить предложение ORDER BY?

order by online DESC LIMIT 20
2 голосов
/ 15 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...