我必须按以下方式在表上执行选择:我在2列中搜索一些字符串,搜索字符串可以是一个或第二个,或两者兼而有之。MySQL查询使用相同的选择模式选择2列
SELECT * FROM table
WHERE TITLE LIKE '%pat1%' OR TITLE LIKE '%pat2%' OR TITLE LIKE '%pat3%' etc.
没有为搜索模式没有限制:
要单列我会使用类似选择。
但我想执行此查询,以便它检查搜索模式是否在列或其他。
我必须按以下方式在表上执行选择:我在2列中搜索一些字符串,搜索字符串可以是一个或第二个,或两者兼而有之。MySQL查询使用相同的选择模式选择2列
SELECT * FROM table
WHERE TITLE LIKE '%pat1%' OR TITLE LIKE '%pat2%' OR TITLE LIKE '%pat3%' etc.
没有为搜索模式没有限制:
要单列我会使用类似选择。
但我想执行此查询,以便它检查搜索模式是否在列或其他。
连接两列成为一个。
where CONCAT(title,subject) like '%pat1%'
还检查了
MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])
你就不能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.)
在我的工作主要是数据库管理系统,我会创建一个临时表来保存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是否足够灵活以允许你这样做。
聪明! :) ..... – Pentium10 2010-03-03 10:19:08
我会添加一个奇怪的分隔符,以便您不会因为CONCAT而获得匹配。例如:“超级”,“Duper”与“perdu”不匹配,但是“SuperDuper”。所以只需添加一个奇怪的字符之间(如|) – van 2010-02-28 14:00:42
在这种情况下的好点使用:'CONCAT_WS('|',标题,主题)' – Pentium10 2010-02-28 14:03:35
这适用于针对多列的一种模式...现在,关于多个针对单个列或针对一对列的模式? – 2010-03-03 06:14:50