与字段的一个或多个条件匹配的查询行
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
【讨论】:
以上是关于与字段的一个或多个条件匹配的查询行的主要内容,如果未能解决你的问题,请参考以下文章