Голову сломал, поэтому, прошу помощи.
Суть вопроса: есть таблица table, в которой хранятся объявления. Вот такая структура:
id | author_id | rubric_id | published | остальное не важно
Например, мне нужно вывести массив из 10 объявлений, в таком порядке:
1) Сначала объявления с author_id=XXX, если они есть
2) Если их нет, или их набралось менее, чем 10, то дополнить массив объявлениями с rubric_id=YYY
3) Если массив до сих пор не наполнился 10-ю элементами, то добавить в него ещё несколько рандомных объявлений
4) И всё это отсортировать по дате published
Как правильно составить mySQL-запрос?
Уф))) Спасибо!!!
select *
from (
select id, author_id, rubric_id, published
from table
order by author_id=XXX desc, rubric_id=YYY desc
limit 10
) X
order by published
Таков синтаксис для MySQL, так как в нем условие author_id=XXX
возвращает 0 в случае если автор не равен XXX и 1 если равен. Таким образом при обратной сортировке в начале получаем всех авторов XXX, после них идут остальные авторы. Для совпавших значений первой колонки идет сортировка по второй, а следовательно для не совпавших авторов первыми получаем нужную рубрику.
P.S. для других СУБД сравнение может не давать числовые 0 и 1 и там потребуется писать более сложные конструкции вроде order by case author_id when XXX then 1 else 0 end desc, ...
select * from (
select * from table where author_id=XXX
union
select * from table where rubric_id=YYY
union
select * from table where author_id <> XXX and rubric_id <> YYY)
order by published
limit 10
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
как вывести на страницу pdf файл полученный по curl через обращение на api ? если вывести print_r result То ничего нет , как убедится что файл получен ?
Пытаюсь получить сообщения с чата прямой трансляции с помощью GET-запроса
Подскажите, как в Laravel сделать route как тут: https://jsonplaceholdertypicode