Как вернуть сначала указанные c строк, а затем рандомизировать остальные в MySQL? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть эта таблица, где у меня есть около 250 строк. Я хочу вернуть все строки, но сначала я хочу отобразить шесть строк, где находится поле spazio = 'auditorium', а затем отобразить все оставшиеся строки в случайном порядке. Я пробовал что-то вроде

SELECT * FROM table ORDER BY case when spazio = 'auditorium' then case spazio != 'auditorium' RAND()

Но это не возвращает то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Я бы порекомендовал две order by клавиши:

SELECT *
FROM table
ORDER BY (spazio = 'auditorium') desc, RAND()

Первое условие - логическое. Поскольку true> false, вы хотите сортировку по убыванию, чтобы сначала получить аудитории в наборе результатов.

0 голосов
/ 18 февраля 2020

Вам нужны ELSE, THEN и END. Вам также необходимо присвоить число вашему первому THEN, которое я собираюсь сказать, должно быть 0, поэтому оно является первым в порядке ASC.

ORDER BY сводит все к числу Значение, чтобы привести их в порядок. Оператор CASE должен вернуть ему номер. Не говоря уже о том, что RAND возвращает число от 0 до 1, поэтому десятичное число. На самом деле, он также может вернуть 0, поэтому безопаснее добавить 1.

SELECT * FROM `table` ORDER BY CASE WHEN `spazio` = "auditorium" THEN 0 ELSE RAND() + 1 END ASC

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