2011-06-07 64 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