2010-02-28 113 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