2017-06-17 199 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 + "%'));";