2010-02-28 82 views
1

我必须按以下方式在表上执行选择:我在2列中搜索一些字符串,搜索字符串可以是一个或第二个,或两者兼而有之。MySQL查询使用相同的选择模式选择2列

SELECT * FROM table 
WHERE TITLE LIKE '%pat1%' OR TITLE LIKE '%pat2%' OR TITLE LIKE '%pat3%' etc. 

没有为搜索模式没有限制:

要单列我会使用类似选择。

但我想执行此查询,以便它检查搜索模式是否在列或其他。

回答

3

连接两列成为一个。

where CONCAT(title,subject) like '%pat1%' 

还检查了

MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])

+1

我会添加一个奇怪的分隔符,以便您不会因为CONCAT而获得匹配。例如:“超级”,“Duper”与“perdu”不匹配,但是“SuperDuper”。所以只需添加一个奇怪的字符之间(如|) – van 2010-02-28 14:00:42

+0

在这种情况下的好点使用:'CONCAT_WS('|',标题,主题)' – Pentium10 2010-02-28 14:03:35

+0

这适用于针对多列的一种模式...现在,关于多个针对单个列或针对一对列的模式? – 2010-03-03 06:14:50

0

你就不能OR两列?

SELECT * FROM table WHERE 
col1 LIKE '%path1%' OR col2 LIKE '%path1%' OR 
col1 LIKE '%path2%' OR col2 LIKE '%path2%' OR 
etc. 

或者根据您搜索的精确语义:

SELECT * FROM table WHERE 
(col1 LIKE '%path1%' OR col1 LIKE '%path2%' OR etc.) OR 
(col2 LIKE '%path1%' OR col2 LIKE '%path2%' OR etc.) 
1

在我的工作主要是数据库管理系统,我会创建一个临时表来保存N个模式串,然后用在跨与主表连接做针对多种模式和多列查询:

CREATE TEMP TABLE SearchPatterns(Pattern VARCHAR(32)); 
INSERT INTO SearchPatterns('%patt1%'); 
INSERT INTO SearchPatterns('%path2%'); 
INSERT INTO SearchPatterns('%pith3%'); 
INSERT INTO SearchPatterns('%sith4%'); 

SELECT DISTINCT T.* 
    FROM MainTable AS T CROSS JOIN SearchPatterns AS P 
WHERE T.Col1 LIKE P.Pattern 
    OR T.Col2 LIKE P.Pattern; 

这延伸到图案任意数量和列的任意数量的,当然。我无法告诉你的是,MySQL是否足够灵活以允许你这样做。

+0

聪明! :) ..... – Pentium10 2010-03-03 10:19:08