me: mySQL: Mit "limit" auswählen und dann umdrehen?

Hallo!

Ich wähle mit PHP mit "limit 0,3" aus einer Datenbank Datensätze aus. Wie kann ich es jetzt machen, dass bei der Ausgabe beim letzten Datensatz begonnen wird?

  1. Moin,

    Ich wähle mit PHP mit "limit 0,3" aus einer Datenbank Datensätze aus. Wie kann ich es jetzt machen, dass bei der Ausgabe beim letzten Datensatz begonnen wird?

    Du kannst bei MySQL Datensätze für die Ausgabe ordnen lassen über "ORDER BY...". Wenn du die Reiheinfolge umgedreht haben willst, hänge einfach noch ein DESC hinten dran. Also z.B."ORDER BY id DESC", dann werden dir deine Datensätze nicht aufsteigend ausgegeben, sondern absteigend.

    HTH
    Ralf

    1. gerade das ordnen nach id will ich ja vermeiden, da ich immer genau 4 datensätze heraushole (und manchmal auch datensätze dazwischen gelöscht werden). diese will ich dann nur mehr umgekehrt ausgeben. mit "desc" funktioniert das leider nicht :(

      1. Hallo,

        gerade das ordnen nach id will ich ja vermeiden, da ich immer genau 4 datensätze heraushole ....

        Auf Grund deiner _ausführlichen_ Problembeschreibung bekamst du ja bereits eine Antwort in der du wohl noch eine Kleinigkeit übersehen hast: z.B.

        Also z.B."ORDER BY id DESC" ....

        Wenn du nicht nach "id" sortieren möchtest/kannst, dann sortiere doch nach "weiß_der_teufel_was".

        Wenn's das auch nicht ist was du wissen willst, dann formuliere bitte deine Frage so, daß man auch ohne hellseherische Fähigkeiten drauf kommt, was du nun eigentlich genau wissen willst.

        Gruß
        der_bernd

        1. tut mir leid wenns nicht verstanden wurde.
          Ich möchte sie eben nach nichts ordnen, weil sie in der Reihenfolge ausgegeben werden sollen wie sie in der Tabelle stehen nur eben umgekehrt.
          mit "limit" muss ich es deshalb machen, weil ich immer genau 4 datensätze heraushole. wenn ich mit id sortieren würde, würde es nicht mehr klappen, sobald ein datensatz gelöscht wird.

          war das jetzt verständlich? :)

          1. Moin nochmals,

            mit "limit" muss ich es deshalb machen, weil ich immer genau 4 datensätze heraushole. wenn ich mit id sortieren würde, würde es nicht mehr klappen, sobald ein datensatz gelöscht wird.

            Ist eigentlich völlig wurscht ob ein Datensatz gelöscht wird.
            Angenommen du hast 10 Datensätze mit den ids 1,2,3,4,5,6,7,8,9,10. Wenn jetzt Datensatz 2 gelöscht wird, dein Limit aber weiterhin bei 0,4 liegt, denn werden dir die Datensätze 1,3,4 und 5 ausgegeben. Und die denn auch wiederum absteigend also 5 zuerst und dann 4,3 und 1. MySQL ersetzt ja die ids nicht, wenn du einen Datensatz löscht, sondern hängt die immer hinten dran. Das heißt, du könntest z.B. nur einen Datensatz in deiner DB haben, der aber die id 5789 hat.

            Oder verstehe ich dich vielleicht völlig falsch?

            Gruß
            Ralf

            1. das weiß ich schon. nur wenn ich aus den datensätzen 1,2,3,4,5 zb. den 3. rauslösche fügt mysql den nächsten datensatz dann dort ein wo der gelöschte war: 1,2,6,4,5
              habs ausprobiert, ist wirklich so. das ist also das problem bei den ids.

              1. Moin!

                das weiß ich schon. nur wenn ich aus den datensätzen 1,2,3,4,5 zb. den 3. rauslösche fügt mysql den nächsten datensatz dann dort ein wo der gelöschte war: 1,2,6,4,5
                habs ausprobiert, ist wirklich so. das ist also das problem bei den ids.

                Das Problem ist: Du hast noch nicht verstanden, wie mySQL die Tabellen sortiert. Nämlich garnicht. Die Ausgabe ist wild durcheinander, ganz so, wie es der Datenbank gerade einfällt. Wenn du also nicht die ganze Tabelle ausgeben willst, sondern nur den ersten Teil (und vielleicht auch den zweiten), dann mußt du sortieren. Sonst gibts es nicht "den ersten Teil", sondern zufällige erste Daten, die bei jedem Mal anders aussehen können, weshalb es auch keinen "zweiten Teil" gibt, bzw. man auf diese Weise nicht sicherstellen kann, daß vielleicht Einträge doppelt oder garnicht auftreten können.

                Wenn du nach einem eindeutigen Kriterium sortierst, hast du das Problem nicht, und kannst ganz nach Laune vorne oder hinten die Liste anfangen.

                Du WILLST also eine eindeutige, automatisch hochzählende ID haben, nach der du sortieren kannst. Oder du sortierst nach irgendwas anderem. LIMIT ohne ORDER BY ist jedenfalls ziemlich blödsinnig.

                - Sven Rautenberg