2013-11-09 51 views
-1

我有一个表命名ad_categories,其结构是这样的 enter image description here如何写一个搜索查询在以下条件下

,我有另一台命名为pub_categories,其结构是这样的 enter image description here

ID在这两个表是不同的,我需要选择id's of ad_categories WHERE任何ad_categories.cid should be in pub_categories.cid OR any of ad_categories.scid should be in ad_categories.scid OR any of the ad_categories.tcid should be in pub_categories.tcid 我有CID列表多达35 SCID高达250 TCID高达600如何才能做到这一点任何一个请帮助我..

cid是主要类别scid是子类别,tcid是thrid子类别。 ad_category是广告商选择类别的地方,pub_catogries是发布商选择类别的地方。我有多达30个子类别的分类最多250个,第三个分类最多600个。 广告客户和发布商都可以选择多个类别 我尝试了通过''分析pub_categories cid,scid和tcid,并使用类似条件搜索值像这样

(ad_cat.cid LIKE '%,1,%' OR ad_cat.cid LIKE '%,1') OR (ad_cat.cid LIKE '%,2,%' OR ad_cat.cid LIKE '%,2') OR (ad_cat.scid LIKE '%,1,%' OR ad_cat.scid LIKE '%,1') OR (ad_cat.scid LIKE '%,2,%' OR ad_cat.scid LIKE '%,2') OR (ad_cat.scid LIKE '%,3,%' OR ad_cat.scid LIKE '%,3') OR (ad_cat.scid LIKE '%,4,%' OR ad_cat.scid LIKE '%,4') OR (ad_cat.scid LIKE '%,5,%' OR ad_cat.scid LIKE '%,5') OR (ad_cat.tcid LIKE '%,1,%' OR ad_cat.tcid LIKE '%,1') OR (ad_cat.tcid LIKE '%,2,%' OR ad_cat.tcid LIKE '%,2') OR (ad_cat.tcid LIKE '%,3,%' OR ad_cat.tcid LIKE '%,3') OR (ad_cat.tcid LIKE '%,4,%' OR ad_cat.tcid LIKE '%,4') OR (ad_cat.tcid LIKE '%,5,%' OR ad_cat.tcid LIKE '%,5') 
+3

这将是非常困难的工作。不要在'cid','scid'和'tcid'中存储列表 - 使用另一个表。参见[本教程](http://www.dreamincode.net/forums/topic/179103-relational-database-design-normalization/)寻求帮助。 –

回答

0

对于以逗号分隔的列分隔的匹配逗号,您只有一个选择在查询中拥有RegExp。规则是这样的:

ad_categories.cid REGEXP '(^|,)(11|2|4)(,|$)' 

ad_categories.cid REGEXP '(^|,)(REPLACE(pub_categories.cid, ',', '|'))(,|$)' 

希望这会有所帮助。