2017-04-07 5 views
0

から単語を一致させるためにMySQLでREGEXPを使用します。は、どのように私のようなMySQLのクエリを持っているテキスト

テキストからのいずれかの単語を含むレコードを取得したいとします。c cu cus cust usto stom tom om m

私は、クエリの下に試してみました:私は7、レコードが、これらの7つのレコードを返すクエリの上

SELECT name FROM table_name WHERE name like '%custom%' OR name REGEXP 'c|cu|cus|cust|usto|stom|tom|om|m' limit 10 

は、第一クエリ結果が持っている、このような2つのレコードを持っていません。

どうすれば入手できますか?または、mysqlでこれらの結果を得る他の方法は?

EDIT:ここでも、2番目のクエリで最大部分文字列の一致を指定して注文したいと考えています。 REGEXPLIKEの必要はありません

SELECT name FROM table_name WHERE name REGEXP 'custom' limit 10; 

が、LIKEより遅いREGEXPです:

+0

クエリに問題はありません。両方のクエリの出力をここに貼り付けることができます。 –

+0

'c'を単語と見なしますか? – revo

+0

はい、私の質問は、どのような結果を得たいかの例です。ウェブサービスで 'custom'を動的に取得し、正確なキーワードとその部分文字列に一致するレコードを返します(これはキーワードのスペルが間違っている場合です)。 –

答えて

0

これを試してみてください。あなたのテーブルが非常に多くのレコードを持っているなら、REGEXPクエスチョンは遅くなります。

+0

このクエリは私の最初のクエリと同じ結果を返しますが、レコードは2つだけですが、合計9レコードを取得したいのです( 'name LIKE '%custom%''と 'c | cu | cus | cust | usto | stom | tom | om | m') –

0

これを試してみてください:私たちは上記のやった

SELECT name FROM table_name WHERE name REGEXP 'custom|c|cu|cus|cust|usto|stom|tom|om|m' limit 10 

は、我々はパターンの残りの部分とcustomを組み合わせた、と私たちはそれらすべてがREGEXPを使用したことです。

+0

いいえ、まだ7つのレコードがあります。 REGEXPは大文字と小文字を区別しますか?私の最初のクエリ結果には、 'custom'ではなく' Custom'があります。 –

+0

それらの両方を 'Custom | custom'に追加してみてください。違いがある場合は参照してください。 – Ibrahim

+0

私は試しましたが、同じ結果です。 –

0

あなたは、MySQLの単語の終わりのための単語の開始と[[:>:]]ため[[:<:]]ある単語の境界を、追加する必要があります。

SELECT name 
FROM table_name 
WHERE name REGEXP '[[:<:]](c|cu|cus|cust|usto|stom|tom|om|m)[[:>:]]' 
limit 10 

live demoを参照してください。

交互の角かっこに注意してください。

+0

私は空の結果セットを返しています。 –

+0

Typo - コロンがありませんでした。今すぐやってみて下さい。デモも参照してください。 – Bohemian

関連する問題