2017-03-17 13 views
1

しばらくの間これを苦労していました。 'word'列の単語が検索語の一部であるテーブルのすべての行を検索する方法はありますか?MySql Regexpの結果単語の一部が既知の単語の部分

+---------+-----------------+ 
| id_word | word   | 
+---------+-----------------+ 
| 177041 | utvälj   | 
| 119270 | fonders   | 
| 39968 | flamländarens | 
| 63567 | hänvisningarnas | 
| 61244 | hovdansers  | 
+---------+-----------------+ 

私は行119270を抽出したいと思います。私はこれを、「プラフォンダー」という言葉で渡したいと思います。

SELECT * FROM words WHERE word REGEXP 'plafonders$' 

このクエリはもちろんこの場合は機能しませんが、逆の場合は完璧でした。

誰にも解決策がありますか?

+0

クエリは返しません結果は?それともクラッシュするのですか? –

答えて

1
SELECT * FROM words WHERE 'plafonders' REGEXP concat(word, '$') 

は、必要なものを達成する必要があります。あなたの正規表現は:

plafonders$ 

列の末尾にplafondersを探しています。これは、列が終わるまですべてのものを探しています。正規表現は119270の場合はfonders$です。

https://regex101.com/r/Ytb3kg/2/と比較してhttps://regex101.com/r/Ytb3kg/1/を参照してください。

+0

魅力のように動作します!:) –

+0

テーブルが大きくなるまで魅力的です。このクエリは、常にテーブル全体をスキャンします。 –

+0

@RickJames OPは入力を緩やかな 'word'マッチと比較したいのですが、完全なテーブルスキャンがないとどうしたらいいですか?私は以下のあなたの答えを見ますが、それも '単語'を評価するために完全なテーブルスキャンが必要ですか? – chris85

0

MySQLのREGEXPでは、アクセント記号付きの文字はうまく処理されません。あなたの限られた状況ではおそらく問題なく動作します。 (それはまだテーブルスキャンが必要ですが)

はここで若干速いアプローチです:

SELECT * FROM words 
    WHERE 'PLAutvälj' = 
     RIGHT('PLAutvälj', CHAR_LENGTH(word)) = word; 

(アクセントを確認するには、私はあなたのテーブルから別の単語を選んだ。)

関連する問題