@KBBS

Как правильно составить запрос, если это возможно?

Необходимо выбрать 10 записей с самым высоким рейтингом из определённой категории:

SELECT * FROM `tbl` WHERE `category` = 1 ORDER BY `rating` DESC LIMIT 10;

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

В общем, должен быть такой алгоритм:
Если выборка с WHERE нам даёт 10 записей, то мы выбираем их и только их.
Если записей с учётом WHERE нету, то берём 10 записей из любых категорий.
Если с учётом WHERE мы можем получить только 4 записи, то берём их, а остальные 6 добиваем записями из любых категорий.
Но на выходе мы всегда должны получать 10 записей отсортированных по рейтингу.
Можно ли написать такое одним запросом?
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Вы можете использовать сортировку сначала по category = 1 DESC, затем rating DESC
SELECT * FROM tbl 
ORDER BY 
	category = 1 DESC, 
	rating DESC 
LIMIT 10;


Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы