mysql Abfrage-Problem NOT LIKE
music152
- datenbank
Hallo, Forumsteam!
Ich habe ein mySQL Problem und komme einfach nicht weiter. Und zwar funktioniert die "NOT LIKE" in meiner mysql Abfrage nicht. Wenn ich jedoch nur LIKE verwende, funktioniert die Abfrage normal und ich bekomme das Gegenteil des gewünschten Ergebnisses; verwende ich NOT LIKE, bleibt die Ausgabe leer.
Hier meine Abfrage als Muster:
SELECT * FROM tbl1 WHERE (tbl1id BETWEEN ".$max." AND ".$min.") AND (tbl1.kom NOT LIKE '%k%') ORDER BY tbl1id ASC;
Ziel: Es sollen alle Datensätze angeteigt werden, derden ID zwischen max und min liegt und bei denen NICHT k in der Spalte kom steht.
Hi,
Ziel: Es sollen alle Datensätze angeteigt werden, derden ID zwischen max und min liegt und bei denen NICHT k in der Spalte kom steht.
ich frage nur mal pro Forma: Dir ist der Unterschied zwischen NICHT k und NIRGENDWO k klar? LIKE mit %k% sucht alle Worte, bei denen vor dem k und hinter dem k was stehen ward.
MfG
Rouven
ich frage nur mal pro Forma: Dir ist der Unterschied zwischen NICHT k und NIRGENDWO k klar?
Ja, ist er. Er spielt hier aber auf Grund der Datenstruktur keine Rolle. Leider habe ich auch mit = und <> das gleiche Problem. = liefert das Gegenteil des gewünschten Ergebnisses, bei <> ist die Ausgabe leer. Irgendwo muss ich also einen (Denk-)Fehler haben?!
Hi,
Ja, ist er. Er spielt hier aber auf Grund der Datenstruktur keine Rolle. Leider habe ich auch mit = und <> das gleiche Problem. = liefert das Gegenteil des gewünschten Ergebnisses, bei <> ist die Ausgabe leer.
nun ja, also zunächst mal solltest du auf LIKE nach Möglichkeit verzichten, weil die direkten Vergleichsoperatoren idR performanter sind.
Bzgl. deines Ausgangsproblems: Poste bitte mal ein paar Beispieldaten, also eigentlich kann das nicht so schwer sein.
MfG
Rouven
eigentlich sehr einfach alles, drum wurmt es mich ja um so mehr:
im feld ID sind nur fortlaufende int werte, dann kommen ein paar textfelder mit namen und adressdaten, dann die char spalte mit der länge eins namens "kom" um in form von buchstaben kommentare zum jeweiligen datensatz abzulegen; hier z.B. "k" für "kein interesse", diese datensätze sollen hier also nicht angezeigt werden. sonst ist die spalte "k" bisher nur mit NULL gefüllt, also entweder steht "k" oder "NULL" drin, andere werte kommen bisher nicht vor.
Was liefert denn SELECT * FROM table WHERE kom <> 'k'?
MfG
Rouven
Was liefert denn SELECT * FROM table WHERE kom <> 'k'?
leere, wohingegen = 'k' alle datensätze der tabelle ausgibt, die k enthalten. es sind aber etliche drin, die andere werte als k in kom habe...
nachtrag: zur zeit steht entweder "NULL" oder eben k in der spalte kom - habe mal einen wert dort per hand verändert in "l" - dieser datensatz wird dann angezeigt. es liegt also wohl daran, dass die leeren felder (NULL) nicht als "nicht k" erkannt werde.
hi,
nachtrag: zur zeit steht entweder "NULL" oder eben k in der spalte kom - habe mal einen wert dort per hand verändert in "l" - dieser datensatz wird dann angezeigt. es liegt also wohl daran, dass die leeren felder (NULL) nicht als "nicht k" erkannt werde.
9.1.5. NULL Values
A.5.3. Problems with NULL Values
3.3.4.6. Working with NULL Values
gruß,
wahsaga
danke! habe wieder was dazugelernt und mit der IS NULL funktion, gehts prima. :)