[MySQL 3.23.X] Problem mit einer komplexeren SELECT-Anweisung (LIMIT & ORDER BY)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 3.23.X] Problem mit einer komplexeren SELECT-Anweisung (LIMIT & ORDER BY)

    Hallo,

    ich stehe nun schon seit ca. 3 Std. vor einem MySQL-Problem und hoffe, dass mir hier jmd. helfen kann.

    Beschreibung:
    Ich will, dass mir MySQL das Ergebnis einer Anfrage erst limitiert und dann das limitierte Ergebnis sortiert.

    Logisch gesehen, würde dazu folgender MySQL-Query passen:

    PHP-Code:
    <?php

    // von den vielen Spaltennamen und WHERE-Bedingungen nicht
    //verwirren lassen, habe das jetzt nur mal aus dem Script,
    //das ich grade code, kopiert
    $sqlab "SELECT ID,marke,modell,modellzusatz,erstzulassung_j,
    kilometerstand,leistung,leistungin,verkaufspreis,
    beschr,garantieleistung,bemerk,bild
              FROM tf_finserate 
              WHERE (online = 1) AND
              (bezahlt = 1) AND
              (erstzulassung_j > 1900) AND
              (verkaufspreis > 0) AND
              (uzeit > 1080818301) 
              LIMIT 0, 2
              ORDER BY marke DESC"
    ;

    ?>
    Das Problem ist aber, dass MySQL bei dieser Anfrage einen syntaktischen Fehler meldet, um genau zu sein:

    You have an error in your SQL syntax.
    Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY marke DESC' at line 5
    Viele würden wahrscheinlich an dieser Stelle mit einem Reply kommen, der besagt, dass ich die LIMIT-Anweisung einfach mit der ORDER BY-Anweisung vertauschen soll. Dies würde dann dazu führen, dass MySQL die Anfrage problemlos ausführt, sie allerdings nicht dies macht, was ich gerne hätte. Denn in diesem Fall würde MySQL das Ergebnis erst sortieren und dann limitieren.

    Ich bin hier mit meinem Datenbanken-Latei am Ende und würde mich deshalb über jegliche Hilfe freuen.

    *waiting4help*
    ph1L

  • #2
    erst sortieren, dann limitieren?
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

    Kommentar


    • #3
      Hast du den 2. Teil meines Postings gelesen ?

      Wie schon gesagt, bringt mir das nicht das gewünschte Ergebnis.

      Es muss auf jeden Fall zuerst limitiert und danach sortiert werden.

      Kann man dazu keinen MySQL-Query basteln ?

      Kommentar


      • #4
        Mir erschliesst sich nicht ganz der Sinn dieser Anforderung. Wieso willst du erst limitieren und dann erst sortieren?!? (ich finde es irgendwie unsinnig etwas zu limitieren, wenn ich gar nicht wirklich weiss, welche Datensätze dabei rauskommen).

        Davon abgesehen glaube ich doch, dass mySQL automatisch nach dem Primärschlüssel sortiert, wenn keine ORDER-BY-Klausel angegeben ist (wie gesagt ich glaube, bin nicht sicher). Was bedeuten würde, dass sich das "unsortierte" limitieren ja quasi genauso verhält wie ein sortiertes limitieren der ID ... demzufolge packst du in dein ORDER-BY einfach noch die ID rein und es sollte funzen .... *hoffe ich*
        [color=red]Geht nicht[/color] ist keine Fehlermeldung

        Kommentar


        • #5
          1. Scheißegal was Du willst ... Auch Du hast Dich an syntaktische Reihenfolgen von SQL zu halten ... und LIMIT gehört danach schlichtweg an's Ende ... steht aber auch in der Doku ...

          2. Nein ... MySQL Sortiert nicht nach irgendwas ... und schon gar nicht wenn's nicht explizit angegeben wurde ... (Ausnahme GROUP BY -> ORDER BY)!
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            du kannst mit Subselect eventuell lösen, etwa:

            select * from (select col1, col2 ... from ... where ... limit ...) order by ...

            ob limit ein order by voraussetzt

            Kommentar


            • #7
              Original geschrieben von asp2php
              ob limit ein order by voraussetzt
              tut es nicht.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Original geschrieben von Abraxax
                tut es nicht.
                thanks @haxe, ich war zu faul, nachzulesen, ... arbeite nicht mit MySQL, daher ... , habe aber grad Thread Titel gelesen (ich weiss, reichlich spät, aber dennoch gelesen ), es ist MySQL 3.X also ist nichts mit Subselect, hehe PGH (Pech gehabt)
                Zuletzt geändert von asp2php; 16.05.2004, 23:56.

                Kommentar


                • #9
                  Original geschrieben von asp2php
                  , hehe PGH (Pech gehabt)
                  hehe. du bist im rheinland ... PJH ... pech jehabt ...
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Hallo!
                    Ohne Subselect:
                    1. Query temporäre Tabelle -> create temporary table tmp... Select..LIMIT
                    2. Select... from tmp ORDER BY
                    Ähnlich http://www.php-resource.de/forum/sho...threadid=38829

                    Wie auch immer, gefährlich ist, dass Du den Limit auf die Speicherposition in der DB beziehst.
                    Das kann schief gehen wenn einzelne Datensätze geändert/gelöscht/wieder eingefügt werden.

                    Besser: einen auto_increment in die Tabelle, und danach das 1. Query sortieren.

                    Kommentar


                    • #11
                      Vielen Dank an alle für die reichlichen Antworten. Habe mir aus den von euch genannten Sache nun einen Query gebastelt, der das macht, was ich will. Problem ist also gelöst.

                      *thxalot*
                      ph1L

                      Kommentar

                      Lädt...
                      X