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.

第 3 に、検索用語が行の 50% 以上に一致する場合、その用語は一般的すぎると見なされ、検索は失敗します。

ここを読んでください。

于 2012-06-11T19:18:23.500 に答える
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 に答える
0

これを試して。

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

tablename と MATCH にアポストロフィを使用していると思います。これは間違っています。試してみて、これがうまくいくかどうか教えてください。

于 2012-06-11T18:34:34.997 に答える