与字段的一个或多个条件匹配的查询行

Posted

技术标签:

【中文标题】与字段的一个或多个条件匹配的查询行【英文标题】:query rows that are matched to one or more criteria of field 【发布时间】:2013-01-01 05:59:00 【问题描述】:

我想选择与一个或多个条件匹配的行。

示例表和数据

#ID #NAME #KEYWORDS(Varchar)


1 BBC   news,finance

2 CNN   music,finance,sports

3 CNBC  music,sports,finance

用户搜索条件将是sports,finance (可以是多个用逗号分隔的关键字),我在查询之前将其准备成关键字字符串列表。

当我像下面这样使用 sql (1) 时,它只选择 CNN 和 CNBC。

SELECT * from channel where Keywords LIKE '%sports%' OR '%finance%';

但是当我使用下面的 sql(2) 时,显示 BBC、CNN、CNBC。

SELECT * from channel where Keywords LIKE '%finance%' OR '%sports%'

我的要求是我想选择所有与关键字匹配的行(在上面的例子中:sports,finance 应该得到 BBC,CNN 和 CNBC,因为这三个都有金融)。

由于用户输入将是 String(sports,finance,etc) ,我只是根据不同的输入进行查询。

【问题讨论】:

你是数据库引擎INNODB还是MYISAM? 【参考方案1】:

使用联合查询比 OR 更好。多个或查询需要更多时间来执行。

SELECT *
FROM channel
WHERE FIND_IN_SET('finance', keywords) 
UNION
SELECT *
FROM channel
      FIND_IN_SET('sports', keywords)

【讨论】:

【参考方案2】:
SELECT *
FROM table1
WHERE FIND_IN_SET('finance', keywords) or
      FIND_IN_SET('sports', keywords)
SQLFiddle Demo

或使用LIKE

SELECT * 
from table1 
where Keywords LIKE '%sports%' OR 
      Keywords LIKE '%finance%'
SQLFiddle Demo

【讨论】:

以上是关于与字段的一个或多个条件匹配的查询行的主要内容,如果未能解决你的问题,请参考以下文章

SQL模糊查询条件的四种匹配模式

sql总结

从与数组上的查询条件匹配的第一个元素中投影特定字段

多选择筛选查询SQL语句怎么写

多个关联表多字段多条件模糊查询

如何使用greendao进行与条件复合查询