2017-05-18 7 views
1

私はsqlite dbに食材のリストを持つテーブルを持っています。検索用語をフィルタリングするアンドロイドの選択クエリを書く方法は?

「赤いフレーク」という用語を持つすべての成分を返す選択クエリを書くにはどうすればよいですか?

例:ユーザータイプ「赤いフレーク」。これは、私に "赤い唐辛子のフレーク"、 "赤い唐辛子のフレーク"の結果を与える必要があります。

これは私が今書いたものです。

c = db.query(Constants.TABLE_COOKIT_INGREDIENT, null, "name LIKE ? ", 
    new String[]{"%" + searchText + "%", }, null, null, 
    Constants.KEY_NAME + " COLLATE NOCASE ASC"); 

これは私に「赤いフレーク」を返します。どんな助けでも大歓迎です。

+0

テキスト内のフレークは、検索順序の問題をしていますか?たとえば、ユーザーが「フレークレッド」と入力すると、同じ結果が得られるはずですか? –

答えて

0

赤*フレークのような結果を得る必要がありますか?あなたの当面の問題については

WHERE name LIKE 'red%' AND name LIKE '%flakes' 
+0

私は 'LIKE '%red%flakes%''を使用します。これは1回の評価が必要です。 –

+0

ええ、それは良いですが、理解しやすいので上に行きました。 @ TimBiegeleisenあなたより良い最適化 – Vishwa

+0

人々は本当ですか?投票ダウン?この答えは何が間違っていますか?私はちょうどdownvotesを置く前に私に知らせてください私は間違っていた場所を改善することができますようにしてください? – Vishwa

2

として 書き込みクエリあなたは次のようなものを使用することができます

WHERE name LIKE '%red%flakes%' 

しかし、私はあなたがSQLiteののフルテキスト検索機能について学ぶためにいくつかの時間を投資を検討すべきだと思います。類似した全文検索は、LIKE式よりもはるかに高速に実行できます。検索ロジックが複雑になると、FTSだけが選択肢になる可能性があります。あなたは仮想テーブルを作成し、現在のテーブルのデータを移入することができます始めるため

CREATE VIRTUAL TABLE table_name 
USING FTS5(name, ...); 

そして、次のようにテーブルをクエリ:あなたが取得したい場合

SELECT * 
FROM table_name 
WHERE name MATCH 'red AND flakes'; 
0

はこれを試してみてくださいその結果、赤

WHERE name LIKE 'red%flakes%' 

OR

で始まります

あなたは赤を含む結果をしたい場合は---どの

WHERE name LIKE '%red%flakes%' 
関連する問題