Onkel Schnitzel: Problem mit LIMIT und WHERE...LIKE

Nabend,

Ich hab mal wieder ne Denkblockade. Ich sitze immer noch an meiner MySQL-Filterfunktion. Das LIMIT arbeitet mit dem WHERE-LIKE nicht so zusammen, wie ichs mir vorgestellt habe.

FROM
                    News
                 WHERE
                    Rubrik
                 LIKE
                   '$auswahl'
                 ORDER BY
                    Datum DESC
                 LIMIT
                    5, 20";

Hier soll er eigentlich die gesamte Tabelle ab dem 5. Datensatz auslesen und dann rausfiltern. Jetzt macht ers umgekehrt- er filtert erst und wendet den offset dann auf die gefundenen Datensätze an. Irgendwie ist das ja auch logisch, es steht ja in der Reihenfolge da ;-)

Ich habe im Moment irgendwie keine Idee, wie ich das richtig machen kann. Ich müßte vielleicht vorher die Tabelle komplett auslesen, die ersten 5 Einträge markieren, dann die Tabelle nochmal komplett auslesen mit Filterfunktion  und von diesem zweiten Ausleseergebnis die vorher markierten Datensätze aussortieren. Irgendwie erscheint mir das aber zu kompliziert und ich wüßte auch auf Anhieb nicht, wie ich das umsetzen könnte. Habt Ihr ne praktikablere Lösung?

Vielen Dank,
Onkel Schnitzel

  1. Hallo Onkel Schnitzel

    Verstehe ich Dein problem richtig??
    Es kommen die richtigen Ergebnisse, nur eben verkehrt,
    also nicht aufwärts sondersn abwärts sortiert.

    Wenn ja,  dann ersetze DESC durch ASC und alles ist okay...

    Schönen Tag noch wünscht
    AhANiBoy

    1. Verstehe ich Dein problem richtig??

      Nein, leider nicht ;-)

  2. Hello,

    Hier soll er eigentlich die gesamte Tabelle ab dem 5. Datensatz auslesen und dann rausfiltern. Jetzt macht ers umgekehrt- er filtert erst und wendet den offset dann auf die gefundenen Datensätze an. Irgendwie ist das ja auch logisch, es steht ja in der Reihenfolge da ;-)

    Wer ist "er"?

    Das limit 'offset, anzahl' bezieht sich immer auf die Ergebnismenge.
    Wenn Du nun die Sätze nach Nummer filtern willst, musst Du das auch in das WHERE-Statement schreiben.

    where nummer > 5

    Welche Nummer auch immer das sein soll.
    Datensätze in SQL-Kollektionen liegen per Definition immer als Menge ohne Sortierung vor.
    Die Ordnung/Sortierung kommt erst über entsprechende Abfragen zustande, die selbstverständlich auf die in den Sätzen enthaltenen Daten aufsetzen müssen.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Datensätze in SQL-Kollektionen liegen per Definition immer als Menge ohne Sortierung vor.
      Die Ordnung/Sortierung kommt erst über entsprechende Abfragen zustande

      Ist richtig, und ich glaube deswegen geht das auch nicht so, wie ichs vorhatte. Aber die IDs werden ja in der Reihenfolge der Erstellung vergeben. Ich könnte also die höchste ID (mysql_num_rows) herausfinden, von dieser 5 abziehen

      $id = mysql_num_rows($anfrage);
      $id2 = $id-5;

      und dann vor der Ausgabe der Daten nochmal eine Bedingung einfügen.

      $id3 = $array['ID'];

      if($id3<$id2) {
            while($xx = mysql_fetch_asscoc........

      else........

      Ob das der Weisheit letzter Schluß ist, weiß ich auch noch nicht, aber ich werds mal versuchen.

      Danke und Gruß,
      Onkel Schnitzel