2

フィールドに複数のキーワードが含まれている行をフェッチするSQLクエリを作成しようとしています。クエリの用途は、jQueryで実装されたオートコンプリート関数の結果をフェッチすることです。

現在、オートコンプリートは機能していますが、私の結果には、特定のフィールドのコンテンツにクエリが含まれているすべての行が含まれます。たとえば、「ar」というフレーズを入力すると、結果には車、ギター、樹皮などが含まれます。

ユーザーは単語の途中のランダムな断片を入力しない可能性が高いため、フレーズで始まる結果のみを返したいと思います。 [私はgemを使用しています] を使用して、最初の単語がクエリで始まるすべての行をフェッチできます。Model.where((:name =~ "#{params[:q]}%")meta_where

ただし、フィールドの2番目の単語がクエリ文字列で始まる行も返したいのですが、最初の単語はそうではありません。

たとえば、行「blackdog」と「dogfood」の場合、クエリ文字列「do」は両方の行を返す必要がありますが、クエリ文字列「do」は「undone」を返さないようにする必要があります。

このような検索のSQLクエリをどのように書く必要がありますか?

4

1 に答える 1

2
Model.where( (:name =~ "#{params[:q]}%") | (:name =~ "% #{params[:q]}%") )

この構造はmeta_whereプラグインでのみ機能します

于 2011-05-19T04:32:54.060 に答える