Приоритет на выборку в mysql

Как сделать приоритет на группировку или же на выборку данных ?

 WHERE content_product_id = "143634"
           AND (content_order_number = "1" OR
                (zone_type_id = 10 AND content_order_number = "special"))
           AND zt.zone_type_id IN (10,12,1)
           AND cell_block = 0
           AND content_product_defect_id = 1

Как сделать что бы приоритет был сначала на AND (content_order_number = "1", а потом уже zone_type_id = 10 AND content_order_number = "special") если не чего не нашло в бд content_order_number = "1" то смотрела уже на content_order_number = "special" И что бы всегда вверху была запись с content_order_number = 1 если нашлась такая.


Ответы (2 шт):

Автор решения: HTMLProgrammer

Как-то так можно решить

DELIMITER //

DROP PROCEDURE IF EXISTS test//

CREATE PROCEDURE test() BEGIN
    SET @count = 0;
    SELECT COUNT(*) INTO @count FROM `users` WHERE `content_order_number` = 1;
    
    IF @count > 0 THEN
        SELECT * FROM `users` WHERE `content_order_number` = 1;
     ELSE
        SELECT * FROM `users` WHERE `zone_type_id` = 10 AND `content_order_number`="special";
     END IF;
END//

call test()//
→ Ссылка
Автор решения: Mike
WHERE content_product_id = "143634"
  AND (content_order_number = "1" OR
      (zone_type_id = 10 AND content_order_number = "special"))
  ...
ORDER BY content_order_number = "1" desc

В сортировке доступны любые выражения, а выражения с оператором = в MySQL возвращают 0 если условие не сработало и 1 если сработало. Сортируем в обратном порядке, что бы 1 были первыми.

→ Ссылка