1

次の 3 つの行を持つ name という名前の列を持つ users テーブルがあるとします。

  • アリス
  • ボブ
  • カール

名前が入力の部分文字列であるレコードを返すクエリを作成したいと思います。たとえば、Alice Jackson をクエリすると、Alice が必要になります。ボビーを検索したら、ボブが欲しい。しかし、Car を検索する場合、一致するものはありません。逆の並べ替えLIKE

これはできますか?また、ActiveRecord 構文を使用して実行できますか?

4

3 に答える 3

1

次のようなことができます ( SQL Server 構文):

SELECT name
FROM users
WHERE 'your query' + ' ' LIKE name + ' %';

以下は Alice を検索します。

SELECT name
FROM users
WHERE 'Alice Jackson' + ' ' LIKE name + ' %';

SELECT name
FROM users
WHERE 'Alice' + ' ' LIKE name + ' %';

次の例では Alice が見つかりません。

 SELECT name
 FROM users
 WHERE 'Ali' + ' ' LIKE name + ' %';
于 2013-05-13T02:17:27.280 に答える
1

これを行うための SQLite の構文を理解しました。

User.where("? LIKE name || '%'", query)

SQLite での連結には二重パイプが明らかに必要です。ただし、plalx が示すように、異なる SQL サーバーは異なる方言を話すため、アプリケーション データベースはこのクエリに依存します。LIKE最後のクエリには、ほとんどの場合、この逆の潜在的なサブセットを 10 レコード未満に制限する追加の句が含まれるため、代わりにそれらのレコードを取得し、アプリケーション レベルでマッチングを実行します。

于 2013-05-13T02:38:16.103 に答える
0

ActiveRecordIN式の使用:

Client.where(:name => query.split(" "))

このコードは、次のような SQL を生成します。

SELECT * FROM clients WHERE (clients.name IN ['Alice', 'Jackson']);
于 2013-05-13T02:25:00.323 に答える