2012-02-03 8 views
0
TABLE ITEMS: (id, name) 
1| chicken 
2| potato 

QUERY:MySQLでの照合を使用する方法

select * from items where match(name) against('tato'); 

空のセットが返されています。作品とのマッチを理解していないのですか?

答えて

0

てみ使用する:

SELECT * FROM items 
WHERE INSTR(name, 'tato') > 0 

または

SELECT * FROM items 
WHERE name LIKE '%tato' 

構文、使用しているが、正しいと思われます。あなたはその分野でフルテキストを有効にしていますか?

ALTER TABLE items ADD FULLTEXT(name); 
+0

これはインデックスを使用せず、完全なテーブルスキャンを行います。大規模なテーブルでは、この方法は機能しません。 –

+0

@KenMazaika:OPは "大きなテーブル"について話しませんでした...とにかく、あなたはもっと良いアイデアを持っていますか? – Marco

0

FULLTEXTインデックスは一部の単語マッチをサポートしているとは思いません。このようなものについては、Marcoが記述した構造のうちの1つを使用する方がよいでしょう。

+1

特殊な演算子を使用してMATCH AGAINSTの動作を変更しない限り、正しいです。 MATCH AGAINSTは、あなたが期待していないかもしれない奇妙なことをすることもできます。たとえば、定義されたストップワードやDB内で頻繁に発生する単語は無視されます。また、ft_min_word_lenシステム変数を満たさない単語は無視されます。これらの理由から、私は強くMarcoの提案を取ってINSTRやLIKEを代わりに使うことを強くお勧めします(ただし、LIKE '%tato%'は文字列のどこにでもtatoを出すために使用します)。 – David

関連する問題