2013-09-30 37 views
0

我有一张表格来存储客户关于产品的选择。Mysql:Multiple where查询

它存储客户编号,产品编号以及是否是产品的肯定或否。我们存储的是/否,因为客户必须对所有产品进行选择,以便我们检查他们是否做出了所有选择。

Customer | Product | Status 
--------------------------- 
12345 | 1  | 0 
12345 | 2  | 1 
12345 | 3  | 1 
12345 | 4  | 0 
12345 | 5  | 1 
23456 | 1  | 1 
23456 | 2  | 0 
23456 | 3  | 1 
23456 | 4  | 1 
23456 | 5  | 0 

我想要做的是检查哪些客户选择了一组特定的产品。 这可能是类似select * from choices where product = 1 and product = 3 group by customer但随后我还必须查询产品与status = 1

有没有办法解决这个查询或我将不得不求助于几个PHP调用?

+2

条件产品= 1和产品= 3会给你零行,因为产品不能同时为1和3。 – Marek

+0

应该注意这是一个错误的例子,更像是“像这样工作”。 – Xavio

回答

3
select customer 
from choices 
where status = 1 and product in (1,3) 
group by customer 
having count(distinct product) = 2 
+0

而且'count count'是我想要匹配的产品数量,我猜? '1,3,6,16,17'会是'= 5',对吗? – Xavio

+0

@ Xavio:对,对。 –

+0

并做了一些修改,这解决了我的问题。谢谢! – Xavio

0
SELECT DISTINCT a.customer 
FROM choices a, choices b 
WHERE a.customer = b.customer 
AND a.product = 1 
AND c.product = 3; 

这样做还可以让你把更复杂的逻辑在后面:如果你在2013年希望大家谁在2012年购买的产品1和产品2,你可以在where子句中添加额外的条件为那些过滤。