2013-02-22 3 views
0

Мне нужна помощь с помощью инструкции select.mysql select with multiple "in"

table: mobiles (brand,model,price) 

Я попробовал синтаксис ниже для получения содержимого.

select * 
from mobiles 
where brand in ('apple','nokia','samsung') 
     and model in ('lumia 510','galaxy s3') 

приведенный выше запрос показывает только «nokia lumia 510» и «samsung galaxy s3».

Я хочу, чтобы он отображал все модели в «яблоко», только «lumia 510» от «nokia» и «galaxy s3» от «samsung».

Я ошибаюсь при использовании синтаксиса?

Я разрабатываю сайт, на котором пользователи могут фильтровать мобильные телефоны по брендам и модели. Мне нужно отображать только мобильные телефоны, которые выбираются пользователем. для каждой марки, если пользователь выбирает конкретную модель, тогда должна отображаться только эта модель, если он выбирает только бренд, тогда все мобильные телефоны под этим брендом должны отображаться.

он может выбрать любое количество брендов, и под каждой маркой он может выбрать или не выбрать конкретную модель.

+1

Попробуйте использовать «ИЛИ» вместо «И» в вашем запросе – Winston

+0

Я попробовал. но его отображение всех моделей в Nokia и Samsung. –

ответ

1

Вы не можете сделать это с помощью IN, потому что у каждой марки разные требования к модели.

SELECT * 
FROM mobiles 
WHERE (brand = 'apple') 
OR (brand = 'nokia' AND model = 'nokia lumia 510') 
OR (brand = 'samsung' AND model = 'galaxy s3') 

Если модели всегда уникальны для конкретной марки, вы можете упростить это немного:

SELECT * 
FROM mobiles 
WHERE brand IN ('apple') 
OR model IN ('nokia lumia 510', 'galaxy s3') 

Помещенных все бренды, которые не имеют моделей, выбранные в первом IN пункте, и все модели во втором. Бренд подразумевается моделью, благодаря уникальным отношениям.

+0

wowww. это удивительное решение. Спасибо за быстрый ответ. –

+0

Мне нужно добавить еще одно условие. "и условие = используется". это не работает. –

+0

Убедитесь, что вы правильно скоблизировали. 'AND' связывается более жестко, чем' OR'. «бренд в модели X ИЛИ в Y И условие = Z' эквивалентно« бренду в X OR (модель в Y AND condition = Z) ». – Barmar