Я хочу иметь объединение двух запросов, но порядок от rand() второго не работает.
(select * from survey
where is_priority = 1)
union all (
select * from (
select * from survey
order by rand()
) as t );
Результат выглядит следующим образом:
Я предполагаю, что вы хотите, чтобы is_priority = 1
сначала, а остальные is_priority = 1
в случайном порядке.
Если это так, вы не должны делать этого с union all
. Просто добавьте правильные ключи в order by
:
select s.*
from survey s
order by (s.is_priority = 1) desc, -- put priority 1 first in the result set
rand();
По общему признанию, это ставит верхние приоритетные строки в случайном порядке (среди них). Но вы не указали для них порядок (и это не проблема, если есть только одна строка, где условие приоритета истинно).
WHERE
на ORDER BY
. Запрос должен работать сейчас. В запросе Гордона используется MySQL true = 1, false = 0. Таким образом, сортировка по (s.is_priority = 1) desc
помещает записи, в которых условие выполняется в первую очередь.
ORDER BY
в вашем втором подзапросе является излишним. Строки результата запроса без предложенияORDER BY
в конце также считаются неупорядоченными. Так что в вашем запросе нет ничего, что могло бы предложить порядок упорядочения строк результатов. Тогда как можноselect * from survey ...
результате только один столбецid_survey
если в таблице явно есть хотя бы еще один столбец (is_priority
)? И, пожалуйста, не вставляйте изображения, скопируйте и вставьте результат в виде текста.