В моем проекте Laravel, в таблице базы данных ads
, у меня есть следующая структура:
id | col1 | col2
col2 имеет значения типа topad
, bump
, urgent
вместе с пустое значение Я хочу взять все строки из таблицы ads
и отсортировать их в алфавитном порядке по col2
в порядке убывания.
Итак, я использовал:
Ads::orderBy('col2','DESC')->get()
Теперь у меня есть 2 условия для применения к запросу.
1-е условие: Предположим, есть 4 строки с topad
в col2
, 5 строк с urgent
в col2
, 6 строк с bump
в col2
и 7 строк с пустым значением в col2
. Таким образом, строки с urgent
в col2
появятся на 1-м месте, с topad
на col2
появятся на 2-м, а bump
на col2
появятся на 3-м и с пустыми значениями на col2
появятся на 4-м. Теперь мне нужно рандомизировать порядок строк в каждом наборе. Например, строки с topad
в col2
могут иметь ids
1,2,3,4. Я хочу рандомизировать эти строки (что может привести, например, к 4,2,1,3). Но они появятся перед строками, содержащими topad
в col2
. То же самое верно для topad
и bump
наборов строк и строк, содержащих любое пустое значение в col2
.
Таким образом, запрос становится:
Ads::orderBy('col2','DESC')->inRandomOrder()->get();
2-е условие: Предположим, строки упорядочены по col2
значениям. Но из каждого набора строк, содержащих одинаковое значение в col2
, мне нужно n
количество строк из тех, которые имеют непустое значение в col2
, то есть случайно Мне нужно n
строк из urgent
ed строк, n
из topad
ed строк, n
из bump
ed строк и все из empty
ed строк.
Как тогда написать запрос?