music152: mysql Abfrage-Problem NOT LIKE

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.

  1. 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

    --
    -------------------
    When the only tool you've got is a hammer, all problems start to look like nails.
    1. 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?!

      1. 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

        --
        -------------------
        Inter Arma Enim Silent Leges  --  Cicero
        1. 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.

          1. Was liefert denn SELECT * FROM table WHERE kom <> 'k'?

            MfG
            Rouven

            --
            -------------------
            Death is nature's way of telling you to slow down.
            1. 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...

              1. 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.

                1. 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

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. danke! habe wieder was dazugelernt und mit der IS NULL funktion, gehts prima. :)