2011-06-07 65 views
1

我有一個非常簡單的LIKE搜索MySQL,我想轉換爲全文。問題是我需要能夠實現它,使之與X.開始如下面的例子:MySQL:將「LIKE」搜索轉換爲全文?

SELECT column FROM table WHERE column LIKE "startswith%" 

,你可以看到,查詢返回所有以「startswith」開頭的所有結果。我需要用全文做這個。

這可能嗎?

+0

你的意思是'像'一個很長的文本%「'? – Sparkup 2011-06-07 21:08:16

回答

2

不,那是工作不是如何全文(它實際上只是一個帶有下鬆的話名單,沒有關於相對於字符串的位置信息),但沒有理由爲什麼你不能有LIKE ...作爲額外WHERE條款。如果在column上沒有其他密鑰,FULLTEXT仍然可以幫助獲得更小的結果子集。如果column上有一個密鑰,那麼對此使用FULLTEXT是無用的。

您可以使用ADD INDEX (column(123));(僅索引前123個字符)在列的開頭設置一個鍵。這也適用於text/blob列(在後一種情況下,它是您給出的二進制長度)。

+0

你能給我一個例子,或者是一個例子的鏈接嗎?這可能是我正在尋找的! – qwerty 2011-06-07 21:23:14

+2

究竟是什麼樣的例子?你的'LIKE'工作,如果你沒有一個鍵,不想使用FULLTEXT,而是設置我建議的鍵,使用'ALTER TABLE tablename ADD INDEX(columname(123));'或任何寬度需要如果你想用FULLTEXT來加快速度,使用'SELECT column FROM table WHERE MATCH(columnname)AGAINST('你的搜索字符串*'IN BOOLEAN MODE)和columnname LIKE'你的搜索字符串%'; – Wrikken 2011-06-07 21:27:18

+0

是的,我正在爲速度而努力。你給我的例子效果很好! :) – qwerty 2011-06-07 22:06:39

0

我不知道MySQL,但是在SQL Server中,你可以將列轉換爲varchar和結果進行LIKE,如下面:

SELECT column FROM table WHERE CONVERT(varchar(255), column) LIKE 'startswidth%' 

因爲這是ANSI標準,我相信MySQL也會處理這個問題。

+0

是的,MySQL會處理它,但沒有必要:LIKE將在沒有轉換的情況下工作。 – Wrikken 2011-06-07 21:17:06