Можно ли как-нибудь сократить количество mysql-кода в следующем запросе?
SELECT IF(EXISTS(SELECT * FROM tbl WHERE `field_1` LIKE '1'),
(SELECT field_3 FROM tbl WHERE `field_1` LIKE '1'),
(SELECT field_3 FROM tbl WHERE `field_2` LIKE '1'));
Ответ
Если столбцы field_1 и field_2 не уникальны, то подзапросы, в приведенном вами примере, могут вернуть несколько значений. Сам запрос можно сократить до одной выборки из таблицы, что сократит число обращений к таблице:
SELECT field_3
FROM tbl
WHERE `field_1` = 1 OR (`field_1` != 1 and `field_2` = 1)
ORDER BY `field_1`
LIMIT 1;
Если field_1 и field_2 уникальны, то сортировка и ограничение числа записей не нужно:
SELECT field_3
FROM tbl
WHERE `field_1` = 1 OR (`field_1` != 1 and `field_2` = 1);
Комментариев нет:
Отправить комментарий