2015-07-02 88 views
0

我试图查询以下内容。基本上客户可以有多种类别。我有一个类别复选框的列表,并希望只显示所选类别的客户端。我一直在尝试使用内部连接,但我的SQL仍处于起步阶段,而且我很明显错误。任何建议不胜感激。谢谢阅读。多对多SQL查询加入

我的表布局:http://www.uk-wired.co.uk/images/sample.jpg

enter image description here

+2

到目前为止你的SQL语句是什么? – Smutje

+0

我的大脑终于搞定了,我差点到了:SELECT * FROM photosms.clients INNER JOIN photosms.clientscategories ON photosms.clientscategories.idclient = photosms.clients.idclient WHERE photosms.clientscategories.idcat = 12或photosms.clientscategories .idcat = 16;值将被替换为复选框值。一个问题,但。如果客户端存在于多个类别中,那么他们将被多次检索,如果可能,我将如何调整查询以仅让客户端拥有一次。谢谢 – macmilm

回答

0
select * from clients join clientscategories on clients.idclient=clientscategories.idclient join categories on clientscategories.idcat=categories.idcat WHERE clientscategories.idcat IN (v1,v2,......) 

我想你可以试试这个,请提供您从复选框选择到V1的值,v2 ...

+0

感谢这是解决方案,但是,如果客户端存在多个类别,他们多次被查询检索。我怎样才能调整查询,只让客户端检索一次。谢谢 – macmilm

1
select * from clients join clientscategories on clientscategories.clientid=clients.clientid where clientscategories.idcat IN (value1,value2,......) 

我希望这虚拟查询来帮你实现你的目标。

-1

首先,您应该在客户端表中添加另一列,如'状态'。而在代码级别,你应该拿一个变量来保存一个字符串,如选中或取消选中。申请条件像

if(checkbox.checked) 
status = "selected"; 
else 
status = "Unselected"; 

then insert client. 

后,你可以申请查询像...

select clientscategories.idclients, clientscategories.idcat, cleints.title etc.. from clientscategories join categories 
on clientscategories.idcat = categories.idcat 
join clients 
on clientscategories.idclient = clients.idclients 
where clients.status = 'Selected'