2017-06-17 3 views
0

Ich zeige Client-Info in einer ListView, in der es Clients nur mit einer Rechnung anzeigt, die in die Datenbank wie so eingegeben wird.SQLite Query-Hilfe benötigt

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

und jetzt versuche ich, eine Suchfunktion zur Listenansicht hinzuzufügen, in dem der Benutzer einen Teil des Namens Kunden eingeben können oder wie so adressieren.

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

und dies die halbe Zeit arbeiten. Die Zeit, die es funktioniert, ist, wenn Sie nur einen Buchstaben eintippen, der in einem Namen und nicht in einer Adresse ist. Wenn Sie jedoch einen Teil einer Adresse suchen, werden nicht nur die Kunden mit der Rechnung angezeigt, sondern auch die Kunden ohne Rechnungen.

Wie kann ich meine Abfrage so ändern, dass nur die Clients mit einer Rechnung angezeigt werden, wenn der Benutzer einen Namen oder eine Adresse in einer Abfrage sucht?

EDIT

ich, dass gerade habe bemerkt, wenn ich in einem Namen Funktionalität der Suche geben Sie die Namen entweder nicht filtern!

EDIT

krank sind einige Bilder für die Suchergebnisse hier

before search results after search results

und hier wird die Suchfunktion zu arbeiten, wenn Sie die Rechnung Teil der Abfrage herausnehmen before search after search

Antwort

3

Setzen Sie den zusätzlichen Bock nach dem AND zwischen Klammern "()". Auf diese Weise, wenn eine der beiden letzten Bedingungen zutrifft, wird der Block nach dem und wird wahr sein.

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 gut! du hast die Hälfte davon gelöst! Danke! Jetzt erscheinen die Kunden ohne Rechnungen nicht bei der Suche, aber die Kunden mit Rechnungen werden nicht durch die Suche gefiltert. – Shawnzey

+0

so behoben Sie mein erstes Problem der Kunden mit keine Rechnungen eingegeben in der ListView bei der Suche angezeigt. Aber jetzt wird die Suche nicht gefiltert und Clients überhaupt nicht. wenn ich einen client namens billy und einen client namens maddy habe und ich den name billy suche, werden beide clients trotzdem angezeigt. – Shawnzey

+0

Lass mich sehen, ob ich es verstehe. Sie möchten die Ergebnisse der ersten Abfrage sehen, aber wenn jemand Text in die Suche eingibt, möchten Sie die Ergebnisse der zweiten Abfrage sehen. Ist es so? – Juan

0

danke an juan, die mich in die richtige richtung geführt haben, indem ich die halbe frage gestellt habe! Alles, was ich tun musste, um das andere Problem zu beheben, war() so um die andere Hälfte!

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