2013-02-22 157 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”。

我希望它显示'apple'中的所有模型,''诺基亚'中的'lumia 510'和'samsung'中的'galaxy s3'。

我错误的使用语法?

我正在开发一个网站,用户可以通过品牌和型号过滤手机。我只需要显示手机用户选择的内容。对于每个品牌(如果用户选择特定型号),则只应显示该型号,如果他只选择该品牌,则应显示该品牌下的所有手机。

他可以选择任意数量的品牌,并且在每个品牌下他可能会或可能不会选择特定的型号。

+1

尝试使用“或”而不是“AND”在您的查询 – Winston 2013-02-22 23:20:51

+0

我试过了。但它展示了诺基亚和三星所有的型号。 – 2013-02-22 23:32:32

回答

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。这是一个很棒的解决方案。感谢您的快速回复。 – 2013-02-22 23:47:52

+0

我需要再添加一个条件。 “和条件=使用”。它不工作。 – 2013-02-22 23:55:44

+0

确保您的括号正确。 'AND'的绑定比'OR'更紧密。 'Y AND条件= Z'中的X OR模型中的品牌相当于X OR中的品牌(Y AND条件= Z中的模型)'。 – Barmar 2013-02-22 23:57:43

相关问题