2011-10-21 8 views
1

文字列内の単語を検索するクエリに何かを入れることができるかどうか疑問に思っています。例えば、私がuser_purchasedという名前のフィールドを持っているなら、それを照会し、その文字列内に 'dog'という単語が存在するレコードだけを取り出したいと思う。文字列内の値を検索するmysqlクエリ

私は私が代わりにクエリ自体でこれを行うと、これはおそらく、パフォーマンスをスピードアップすることができる場合、私は思ったんだけど、私はこの

(!stristr($row['user_purchased'], 'dog')) 

のように、この使用してPHPを行うことができます知っているが。 MySQLでは、この

+0

'LIKE '%foo%''または 'INSTR'を含むすべての回答がフルスキャンを強制することに注意してください。あなたのテーブルが大きければ、これは遅くなります。インデックス検索はできません。 – derobert

+0

もし私がスピードを最大にしたいと思ったら、私は代わりに何を使うでしょうか。私のテーブルは大きいので速度は問題です –

+0

速度が重要な場合は、MySQLフルテキストやSphinxなどのインデックスソリューションが必要です。 – derobert

答えて

1

でのMySQLのマニュアルから(STR、SUBSTR)

引用INSTRを使用することができます。

WHERE your_col LIKE '%dog%' 

パフォーマンスを向上させたい場合は、full text search。これは、FULLTEXT索引を使用して、一致する行をすばやく検索します。

+0

ありがとう、これは理にかなっています。どのように私は彼らの中に犬という言葉を持っていない結果を検索するためにこれを変更するだろうか? –

+1

これを理解し、NOT LIKEを使用してください –

0

の助けを事前に

おかげで、あなたはあなたがLIKEを使用することができますhttp://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_instr

INSTR(str,substr) 

Returns the position of the first occurrence of substring substr in string str. This is the same as the two-argument form of LOCATE(), except that the order of the arguments is reversed. 

mysql> SELECT INSTR('foobarbar', 'bar'); 
     -> 4 
mysql> SELECT INSTR('xbar', 'foobar'); 
     -> 0 
This function is multi-byte safe, and is case sensitive only if at least one argument is a binary string. 
0

SELECT * FROMテーブルWHERE user_purchased LIKE '%dog%';

関連する問題