Union, order by и RAND () в MySQL

0

Я хочу иметь объединение двух запросов, но порядок от rand() второго не работает.

(select * from survey 
where is_priority = 1)
union all (
  select * from (
    select * from survey 
    order by rand() 
    ) as t );

Результат выглядит следующим образом:

Изображение 174551

  • 4
    Объясните, что вы пытаетесь сделать.
  • 0
    Строки в подзапросе считаются неупорядоченными, поэтому ORDER BY в вашем втором подзапросе является излишним. Строки результата запроса без предложения ORDER BY в конце также считаются неупорядоченными. Так что в вашем запросе нет ничего, что могло бы предложить порядок упорядочения строк результатов. Тогда как можно select * from survey ... результате только один столбец id_survey если в таблице явно есть хотя бы еще один столбец ( is_priority )? И, пожалуйста, не вставляйте изображения, скопируйте и вставьте результат в виде текста.
Теги:

1 ответ

0
Лучший ответ

Я предполагаю, что вы хотите, чтобы 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();

По общему признанию, это ставит верхние приоритетные строки в случайном порядке (среди них). Но вы не указали для них порядок (и это не проблема, если есть только одна строка, где условие приоритета истинно).

  • 0
    «Я предполагаю, что сначала вы хотите, чтобы is_priority = 1, а затем остальные в случайном порядке». Да точно! Но ваш запрос не работает .. Я не понимаю "rand ()" без "order by" и сразу после ","
  • 0
    @ arthur-28: Это была явно опечатка. Я отредактировал ответ и заменил WHERE на ORDER BY . Запрос должен работать сейчас. В запросе Гордона используется MySQL true = 1, false = 0. Таким образом, сортировка по (s.is_priority = 1) desc помещает записи, в которых условие выполняется в первую очередь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню