MySQL - 需要在单个字符串中查找多个通配符

标签 mysql

我有一个保存在字符串中的类别列表。一个位于文章表上,另一个位于广告表上。我需要脚本返回两个表之间具有任何这些类别组合的所有行。

两个表上的类别字符串:

Civic,Community,Sports,Business

还有我的 MySQL 脚本

SELECT `Ad_ID`, `Ad_URL`, `Ad_Image`, `Ad_Type`, `Ad_Cities`, `Ad_Categories` 
FROM `Ad_TABLE`

INNER JOIN `Article_TABLE` ON `Article_TABLE`.`Article_Cat` = `Ad_TABLE`.`Ad_Cat`

WHERE Article_TABLE.Article_Cat LIKE '%Civic%'
OR Article_TABLE.Article_Cat LIKE '%Community%'
OR Article_TABLE.Article_Cat LIKE '%Sports%'
OR Article_TABLE.Article_Cat LIKE '%Business%'

AND Ad_TABLE.Ad_Cat LIKE '%Civic%'
OR Ad_TABLE.Ad_Cat LIKE '%Community%'
OR Ad_TABLE.Ad_Cat LIKE '%Sports%'
OR Ad_TABLE.Ad_Cat LIKE '%Business%'

该脚本仅返回仅属于这些类别之一的记录,但有些记录属于多个类别,我也需要它返回这些记录。

如何才能找到两个表之间所有匹配类别的位置?

最佳答案

我怀疑您需要在 WHERE 子句中添加括号:

SELECT `Ad_ID`, `Ad_URL`, `Ad_Image`, `Ad_Type`, `Ad_Cities`, `Ad_Categories` 
FROM `Ad_DB`

INNER JOIN `Article_DB` ON `Article_DB`.`Article_Cat` = `Ad_DB`.`Ad_Cat`

WHERE (Article_DB.Article_Cat LIKE '%Civic%'
OR Article_DB.Article_Cat LIKE '%Community%'
OR Article_DB.Article_Cat LIKE '%Sports%'
OR Article_DB.Article_Cat LIKE '%Business%')

AND (Ad.DB_Cat LIKE '%Civic%'
OR Ad.DB_Cat LIKE '%Community%'
OR Ad.DB_Cat LIKE '%Sports%'
OR Ad.DB_Cat LIKE '%Business%')

我不确定您的表的具体结构,但此查询将返回 Article_DB.Article_Cat AND Ad.DB_Cat 包含您的某一类别的行。您可能需要重新考虑在这些表中存储数据的方式,以免重复数据。

关于MySQL - 需要在单个字符串中查找多个通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41189991/

相关文章:

php - INSERT INTO,多个WHERE IN,检查值是否存在

mysql - mysql中n个查询相交

php - 如何将此 Laravel PHP 代码简化为一个 Eloquent 查询?

mysql - 远程 mysql 连接在 workbench 中有效,但在 python 中无效

php - Kohana ORM,在模型中定义字段

mysql - 如何在 SQL Select 中设置部分 LIMIT

MySQL 事务未根据完整性约束违规异常进行隔离

mysql - 这个ERD有意义吗?

php - 使用 Laravel 语法对三个或四个不同的表执行 JOIN

php - 获取匹配对