2017-06-17 10 views
0

私はクライアントの情報をリストビューに表示しています。SQLiteクエリーのヘルプが必要

query = "SELECT * FROM clients" + 
       " WHERE LOWER(" + COLUMN_BILLONE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTWO + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTHREE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLFOUR + ") NOT LIKE LOWER('bill');"; 

と今私は、ユーザーがそのようなクライアント名またはアドレスの一部を入力することができ、リストビューに検索機能を追加しようとしています。

query = "SELECT * FROM clients" + 
       " WHERE LOWER(" + COLUMN_BILLONE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTWO + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTHREE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLFOUR + ") NOT LIKE LOWER('bill') AND" + 
       " LOWER(" + COLUMN_NAME + ") LIKE LOWER('%" + inputText + "%') OR" + 
       " LOWER(" + COLUMN_ADDRESS + ") LIKE LOWER('%" + inputText + "%');"; 

この作業は半分です。それが動作するのは、アドレスではなく名前にある文字を入力するときだけです。しかし、あなたが住所の任意の部分を検索する場合、それは顧客に請求書を表示するだけでなく、外出先の顧客にも表示されます。

ユーザーが1つのクエリで名前または住所を検索したときに請求書を入力したクライアントのみを表示するようにクエリステートメントを変更するにはどうすればよいですか?

EDIT

私はちょうど私が名前を入力すると検索機能は、どちらかの名前をフィルタリングしていないことに気づきました!

EDIT

病気ここで、検索結果

before search results after search results

、ここのためのいくつかの写真が含まれますが、クエリの法案の一部を取り出したときに、検索機能が働いています before search after search

答えて

3

括弧「()」の間にANDの後に追加のボックを挿入します。このようにして、最後の2つの条件のいずれかが真であれば、との後のブロックが真となります。

query = "SELECT * FROM clients" + 
       " WHERE LOWER(" + COLUMN_BILLONE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTWO + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTHREE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLFOUR + ") NOT LIKE LOWER('bill') AND" + 
       " (LOWER(" + COLUMN_NAME + ") LIKE LOWER('%" + inputText + "%') OR" + 
       " LOWER(" + COLUMN_ADDRESS + ") LIKE LOWER('%" + inputText + "%'));" 
+0

ok great!あなたはその半分を解決しました!ありがとうございました!したがって、請求書のないクライアントは検索時に表示されませんが、請求書のあるクライアントは検索でフィルタリングされません。 – Shawnzey

+0

ので、検索の際にlistViewに表示された請求書を使用せずにクライアントの初期の問題を修正しました。しかし今では、検索は除外されておらず、クライアントもまったくありません。ビリーと名前のクライアントがmaddyという名前でビリーを検索しても、両方のクライアントが表示されます。 – Shawnzey

+0

私は理解するかどうか見てみましょう。最初のクエリの結果を見たいと思っていますが、誰かが検索にテキストを入力すると、2番目のクエリの結果を見たいと思うでしょう。それはそれのようなものですか? – Juan

0

私は正しい方向に私を導いてくれたおかげで、半分の質問を寄せてくれてありがとう!私が他の問題を解決するためにしなければならなかったことは、他の半分の周りにそういうことでした!

query = "SELECT * FROM clients" + 
       " WHERE (LOWER(" + COLUMN_BILLONE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTWO + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLTHREE + ") NOT LIKE LOWER('bill') OR" + 
       " LOWER(" + COLUMN_BILLFOUR + ") NOT LIKE LOWER('bill')) AND" + 
       " (LOWER(" + COLUMN_NAME + ") LIKE LOWER('%" + inputText + "%') OR" + 
       " LOWER(" + COLUMN_ADDRESS + ") LIKE LOWER('%" + inputText + "%'));";