LoginSignup
3
4

More than 3 years have passed since last update.

LIKE句(演算子)を使用したあいまい検索について

Last updated at Posted at 2019-11-24

LIKE句(演算子)を使用したあいまい検索について、完全に忘れていたため、備忘録もかねて以下にまとめます。

LIKE句(演算子)とは

SQLの検索条件に指定される文字列比較演算子である。
ちょっと難しいですが、SQLに対して、LIKE句を使用するとあいまい検索ができるようになるということです。

LIKE句(演算子)の使い方

Railsでは基本的にWhereと一緒に使用し、以下のように使います。

model名.where('検索するカラム名 LIKE(?)', "検索ワード")

検索の取得件数の指定方法
.limited(数)と記載しましょう

>>先ほどのコードと組み合わせると以下のようになります。
model名.where('検索するカラム名 LIKE(?)', '検索ワード').limited(数)

不要な情報を除外する時
.where.not(不要な情報)

>>先ほどのコードと組み合わせると以下のようになります。
model名.where('検索するカラム名 LIKE(?)', '検索ワード').where.not(不要な情報)

ワイルドカードについて

一部を一致させて検索したい時、以下のワイルドカードが使用できます。

ワイルドカード 意味
% 任意の0文字以上の文字列
_ 任意の1文字
>>前に1文字だけ記載あり+後方に0文字以上の記載あり
model名.where('検索するカラム名 LIKE(?)', '_検索ワード%').limited(数)

>>前後ともに0文字以上の記載あり
model名.where('検索するカラム名 LIKE(?)', '%検索ワード%').limited(数)

>>前後ともに1文字の記載あり
model名.where('検索するカラム名 LIKE(?)', '_検索ワード_').limited(数)

具体例

上記を活用して、user名をキーワード入力された際に、検索できるようにします。
[条件]
モデル名:User
あいまい検索機能:キーワードを含んでいればOK
検索取得件数:10件
不要な情報:current_user.id=>ログイン中のユーザーIDを除外します。

上記条件を全てコードに入れると以下のようになります。

User.where(['name LIKE ?', "%#{params[:keyword]}%"]).where.not(id: current_user.id).limit(10)

以上となります。
最後まで閲覧いただき、ありがとうございました。
何か修正の必要な点などございましたら、コメントもしくは編集リクエストいただけますと幸いです。

参照

【Rails入門】where likeであいまい検索!複数条件やOR条件も解説
https://www.sejuku.net/blog/71189

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4