2010-12-20 2 views
1

После анализа моей проблемы, я думаю, мне может понадобиться использовать оператор union в SQL, однако я не уверен. Anywho Я цепочка моих запросов в CodeIgniter, чтобы выйти с этим запросом:Цепочки запросов - Не удается получить AND/OR

SELECT * 
FROM (`deals`) 
WHERE `category` = 'books' 
AND `host` = 'amazon' 
OR `host` = 'zappos' 
OR `host` = 'newegg' 
ORDER BY `time` desc 

Так он выбирает вещи, которые не в категории книгах, но из этих хостов. Поэтому я ищу, чтобы сделать так, чтобы он возвращал только результаты в книгах, И у них было множество из трех. Я предпочел бы делать это с запросом базы данных, а не потом вручную фильтровать. Я использую MySQL с таблицей innoDB. Спасибо

ответ

10

Используйте кронштейны, чтобы они работали по желанию.

SELECT * 
FROM (`deals`) 
WHERE `category` = 'books' 
AND (`host` = 'amazon' 
OR `host` = 'zappos' 
OR `host` = 'newegg') 
ORDER BY `time` desc 

Или использовать 'IN' ключевое слово:

SELECT * 
FROM (`deals`) 
WHERE `category` = 'books' 
AND `host` IN ('amazon', 'zappos', 'newegg') 
ORDER BY `time` desc 
+1

Я думаю, что положение IN является лучшим вариантом –

+1

Я согласен, что положение IN бы самый логичный смысл здесь :) – judda

+0

Работал чудеса Judda! –

0

Попробуйте круглые скобки:

SELECT * 
FROM (`deals`) 
WHERE `category` = 'books' 
AND ( 
`host` = 'amazon' 
OR `host` = 'zappos' 
OR `host` = 'newegg' 
) 
ORDER BY `time` desc 
Смежные вопросы