Приоритет на выборку в 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 были первыми.