0

**编辑* *

好的,所以我找到了问题,搜索的最小字长为 4,我将其更改为 3,但现在它只找到第 1 行数据而不是第 2 行数据...

-----原始问题:----

我的 phpmyadmin 上有一个 MyISAM 表,如下所示:

table name: `users`
coulmn name: `name`
row 1 data: 'dan'
row 2 data: 'dan252'

(这只是它的重要部分)

现在名称是全文索引字段,我使用这个查询:

SELECT * FROM `users` WHERE MATCH(`name`) AGAINST('dan')

但 phpmyadmin 返回:

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.0004 sec )

为什么它什么也没找到?

*编辑*

好的,所以我找到了问题,搜索的最小字长为 4,我将其更改为 3,但现在它只找到第 1 行数据而不是第 2 行数据...

4

3 回答 3

1

MATCH仅适用于具有指示的列FULLTEXT。并且FULLTEXT指示仅适用于 MyISAM 表。

其次,“dan”可能太短而无法在MATCH.

第三,如果您的搜索词匹配超过 50% 的行,则该词被认为太常见并且搜索失败。

在这里阅读。

于 2012-06-11T19:18:23.500 回答
0

试试这个。

SELECT * FROM users WHERE MATCH (name) AGAINST ('dan');

我猜你在表名和 MATCH 中使用撇号。这是错误的。试试看,让我知道这是否有效。

于 2012-06-11T18:34:34.997 回答
0

我猜您正试图返回所有带有“dan”的内容您可以尝试使用 LIKE 命令。

SELECT * FROM users WHERE name LIKE '%dan%'

这将返回“dan”和“dan252”以及(如果他在表中)“123dan456”。

你也可以试试

SELECT * FROM users Match(name) AGAINST('+dan*')

那应该返回相同的东西,并且可能更有效。如果您只是想使用“丹”,那么就像@Kirishna 所说的那样使用。

SELECT * FROM users WHERE MATCH (name) AGAINST ('dan')
于 2012-06-11T18:35:58.307 回答