2017-06-17 242 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');"; 

,現在我想搜索功能添加到ListView,用戶可以在輸入客戶名稱的任何部分或解決像這樣。

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 + "%');"; 

和這個工作的一半時間。它的工作時間是當你只輸入一個名字而不是地址的字母。但是,如果您搜索地址的任何部分,它不僅會向客戶顯示賬單,而且客戶也會輸入賬單。

如何將我的查詢語句更改爲只顯示用戶在用戶在一個查詢中搜索名稱或地址時輸入的帳單?

編輯

我剛纔注意到,當我輸入一個名稱,搜索功能不要麼過濾名字!

編輯

病包括一些圖片在這裏搜索結果

before search results after search results

這裏是搜索功能,當你拿出查詢的票據部分工作 before search after search

回答

3

將括號「()」之間的AND放在後面。就這樣,當兩個最後的條件中的任何一個都成立時,後面的塊將是真實的。

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

好的太棒了!你已經解決了一半!謝謝!所以現在沒有賬單的客戶不會在搜索時出現,但是賬單客戶不會被搜索過濾。 – Shawnzey

+0

所以你解決了我最初的問題,客戶沒有在搜索時顯示在listView中。但是現在搜索並沒有過濾掉客戶端。如果我有一個名叫比利的客戶和一個名叫馬迪的客戶,我搜索名字比利,兩個客戶仍然會出現。 – Shawnzey

+0

讓我看看我是否明白。您希望查看第一個查詢的結果,但是當有人在搜索中鍵入文本時,您希望看到第二個查詢的結果。是這樣嗎? – 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 + "%'));";