2013-01-01 42 views
0

我想选择与一个或多个标准匹配的行。查询与某个或多个字段标准相匹配的行

示例表和数据

#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%' 

我的要求是我要选择的是匹配关键字的所有行(在上面的例子:体育,金融应该得到BBC,CNN和CNBC为所有三个有融资)。

由于用户输入将是一个字符串(体育,金融等),我只是根据不同的输入进行查询。

+0

您的数据库引擎INNODB或MYISAM? –

+0

引擎是INNODB – kitokid

回答

0
SELECT * 
FROM table1 
WHERE FIND_IN_SET('finance', keywords) or 
     FIND_IN_SET('sports', keywords) 

,或者使用LIKE

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

乙etter使用联合查询而不是OR。多个或查询需要更多时间来执行。

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

为什么'union'比'or'好? –