У меня есть список записей в моей таблице. Некоторые из записей являются специальными и имеют флаг «is_premium», установленный в true. Теперь я хочу получить список из своего стола, где все записи премиум-класса находятся наверху, а также заказаны rand. Проблема в том, что после премиум-записей должны отображаться обычные записи. Но их не следует сортировать по ранду. Их следует сортировать по атрибутам, таким как publish_date и update_datetime.MySQL Сортировать по Rand() по результату top
Мое текущее решение этого запроса:
SELECT
first_table.*,
sorting
FROM
first_table
LEFT JOIN
(
SELECT
id,
RAND() AS sorting
FROM
first_table
WHERE
is_premium = 1
) p
ON p.id = first_table.id
INNER JOIN
(
SELECT
first_table.id,
FROM
first_table
WHERE
CURDATE() BETWEEN published_date AND DATE_ADD(published_date,INTERVAL valid_days DAY)
) a
ON inserate.id=a.id
ORDER BY
is_premium DESC,
sorting DESC,
published_date DESC,
update_date DESC
Моя проблема сейчас в том, что не только записи премиум установили значение сортировки, но и обычные записи. и я не знаю, как решить эту проблему.
----- EDIT ----- Спасибо Gordon Linoff Я нашел решение.
SELECT
first_table.*
FROM
first_table
WHERE
CURDATE() BETWEEN published_date AND DATE_ADD(published_date,INTERVAL valid_days DAY)
ORDER BY
is_premium DESC,
(CASE WHEN is_premium THEN rand()END)
published_date DESC,
update_date DESC