2013-11-10 8 views
1

у меня есть эта таблица:MySQL: написать запрос с тем, если в том, где часть

(`id`, `name`, `type`, `price`) 
(1, 'cats', 1, 12.25), 
(2, 'dogs', 0, 11.35), 
(3, 'house', 1, 7.25), 
(4, 'cats2', 2, 5.26); 

мне нужно выбрать все данные, но если тип 1, мне нужно получить товар ведьмой цена более чем 10. создать этот запрос:

SELECT * 
FROM `items` 
WHERE IF(TYPE = "1", price > 10, 1 = 1) 

Хорошо работает, но, возможно, возможно написать гораздо умнее или иным способом? Может быть, не нужно «1 = 1» ?.

Я хотел бы знать ваши советы, спасибо

ответ

2

Ваш 1=1 бессмысленно, но ваш IF нет. Вы можете использовать только 1:

SELECT * 
FROM `items` 
WHERE IF(TYPE = "1", price > 10, 1) 

-since MySQL вычисляет выражение как BOOL (на самом деле, Int) - и так 1 означает 'истина'.

Но с другой стороны, есть логика эквивалент для вашего состояния:

SELECT * 
FROM `items` 
WHERE `price`>10 OR `type`!="1" 

Однако, я сталкивался с таким случаем в another question и, после некоторого исследования, я обнаружил, что IF быстрее, даже если он выглядит более сложным.

Смежные вопросы