我必須按以下方式在表上執行選擇:我在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