MySql: заказ по-разному в пределах одного столбца - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть таблица Foo со столбцом 'FooId'

Пользователи, которые хотят установить Foo attribute, устанавливают его с positive integer, в то время как для других значение этогостолбец -1.

Теперь я хочу, чтобы содержимое таблицы было упорядочено по столбцу FooId так, чтобы результаты с положительным значением FooId были упорядочены раньше тех, которые имеют значение по умолчанию (т.е.-1).Итак, у меня есть мой запрос что-то вроде select * from Foo order by FooId desc.

Теперь я хочу рандомизировать мои результаты так, что результаты с positive 'FooId' все еще перед результатами с FooId = -1, но результатыупорядочены случайным образом .Что-то с rand() тоже должно быть в порядке, так как сейчас я не концентрируюсь на производительности.

Какие у меня есть варианты для формулирования запроса?

Ответы [ 4 ]

2 голосов
/ 23 февраля 2012
SELECT * FROM Foo
ORDER BY IF(FooId>0,RAND(),-0.1) DESC;
0 голосов
/ 23 февраля 2012

Попробуйте ниже:

SELECT * FROM Foo
 ORDER BY IF(FooId > 0,0,1);
0 голосов
/ 23 февраля 2012

Попробуйте этот запрос -

SELECT * FROM Foo ORDER BY if(FooId >= 0, 0, 1), RAND();
0 голосов
/ 23 февраля 2012

Вы можете сделать SELECT ... WHERE FooID >=0 ORDER BY RAND() и затем использовать UNION с другим выбором, например так:

SELECT * 
FROM Foo
WHERE FooID >= 0 
ORDER BY RAND() 
UNION ALL 
SELECT * 
FROM Foo
WHERE FooID == -1;

Вы можете объединить любые таблицы с UNION ALL, если они имеют одинаковые столбцы.

...