【问题标题】:How to write a search query in the below condition如何在以下条件下编写搜索查询
【发布时间】:2013-11-21 07:18:19
【问题描述】:

我有一个名为ad_categories 的表,它的结构是这样的

我还有另一个名为pub_categories 的表,它的结构是这样的

两个表中的 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 是第三个子类。 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')

【问题讨论】:

  • 这将非常难以处理。不要将列表存储在cid、scid 和tcid 中——使用另一个表。请参阅this tutorial 寻求帮助。

标签: php mysql where where-in


【解决方案1】:

对于以逗号分隔的列的匹配逗号分隔,您只有一个选择在查询中使用正则表达式。规则如下:

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

或

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-05-16
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多