Используя подход как в этих ответах:
Вы можете получить номера строк отдельно для строк со значением веса 2 и для строк с любым другим значением веса, а затем использовать полученные числа для сортировки.
Прежде чем продолжить, обратите внимание, что, хотя официальная документация признает, что
Вы можете получить ожидаемые результаты,
также советует,
Как правило, вы никогда не должны присваивать значение пользовательской переменной и читать значение в том же выражении.
(под то же утверждение это означает утверждение, отличное от SET
.)
Ниже приведен способ получения ожидаемого заказа , если результаты соответствуют ожидаемым.
SET @row2 = -1;
SET @row_other = -1;
SELECT
title, weight
FROM (
SELECT
title, weight,
@row2 := @row2 + CASE weight WHEN 2 THEN 1 ELSE 0 END AS weight2_row,
@row_other := @row_other + CASE weight WHEN 2 THEN 0 ELSE 1 END AS other_weight_row
FROM article
) s
ORDER BY
CASE weight WHEN 2 THEN @row2 ELSE @row_other DIV 3 END,
weight = 2 DESC
Конкретный порядок строк, не являющихся Weight=2
, не определен, как и в вашем вопросе.