fr@ger: MySQL: von/bis Einschränkungen?

moin

wenn man seine ergebnis bei mysql einschränken will, so verwendet man LIMIT. dann werden die letzetn X Einträge markiert.
was aber, wenn man nicht eintrag 0-5, sondern 10 bis 15 haben will?

startpunkt festlegbar?

thx

  1. Moin!

    was aber, wenn man nicht eintrag 0-5, sondern 10 bis 15 haben will?

    startpunkt festlegbar?

    Ja.

    Lies die Doku zu MySQL. Dann mußt du hier nicht immer grundlegendste Einfach-Fragen fragen.

    http://www.mysql.de -> Dokumentation -> HTML, mit Suchfunktion

    Da du eine Abfrage mit SELECT machen willst, suchst du die Seite dafür auf:
    http://www.mysql.de/doc/de/SELECT.html und liest.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
  2. moin

    wenn man seine ergebnis bei mysql einschränken will, so verwendet man LIMIT. dann werden die letzetn X Einträge markiert.
    was aber, wenn man nicht eintrag 0-5, sondern 10 bis 15 haben will?

    startpunkt festlegbar?

    Hallo.
    Der erste Wert von LIMIT IST der Startpunkt. Und wie in der MySQL-Doku (die leider schwer durchschaubar ist) beschrieben, der zweite Wert -getrennt durch ein Komma- die Anzahl rückgegebener Reihen (offset).
    Gibst Du nur ein Wert an, rückt das Offset nach vorne und der Startpunkt verschwindet.

    Also ist LIMIT 0,n äquivalent zu LIMIT n

    woraus folgt:

    mysql> SELECT * FROM table LIMIT 5,10;  # für Reihe 6-15

    mysql> SELECT * FROM table LIMIT 98,-1; # für Reihe 98-letzte

    mysql> SELECT * FROM table LIMIT 5;     # für die ersten 5 Reihen

    Ciao, Lars.

  3. Hallo,
    das geht auch mit Limit.

    Das sieht dann so aus:
    ...LIMIT 10,15...

    Einfach ein Kommer setzten, und er gibt dann von dem 10 bis zum 15 Eintrag aus.
    Wenn man ORDER BY id DESC macht, so gibt er die letzten Einträge aus

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. Hallo,
      das geht auch mit Limit.

      Das sieht dann so aus:
      ...LIMIT 10,15...

      Stimmt.

      Einfach ein Kommer setzten, und er gibt dann von dem 10 bis zum 15 Eintrag aus.

      Stimmt nicht!
      Als erstes ist die Startreihe bei LIMIT 10,15 Reihe 11, denn die erste Reihe hat den Bezeichner 0 und zweitens
      gibt er dann nicht 5 Reihen, sondern die Reihen 11 bis 25 aus.

      Wenn man ORDER BY id DESC macht, so gibt er die letzten Einträge aus

      Nun ja. Du setzt einfach voraus, dass id existiert, was nicht der Fall sein muss und lediglich aussagt, dass er nach der Spalte 'id' sortiert.
      Und DESC bedeutet nicht, dass er die letzten Einträge ausgibt, sondern dass die Reihen in umgedrehter Reihenfolge (descending) sortiert werden , also die ID-Ordnung nicht aufsteigend sondern absteigend durchgeführt wird. Und wer jetzt denkt, man bekommt 25 bis 11 anstatt 11 bis 25 ist natürlich auf dem Holzweg.

      Machen wir mal folgendes Beispiel mit einer Tabelle von id 0-6:

      +------+
      | id   |
      +------+
      |    6 |
      |    4 |
      |    0 |
      |    3 |
      |    1 |
      |    2 |
      |    5 |
      +------+

      select * from table1 ORDER BY 'id' ASC;
      würde folgendes zurückgeben (das ASC muss man nicht schreiben):

      +------+
      | id   |
      +------+
      |    0 |
      |    1 |
      |    2 |
      |    3 |
      |    4 |
      |    5 |
      |    6 |
      +------+

      Wenigstens mal eine Reihenfolge. Jetzt machen wir etwas Lustiges: Wir LIMITieren ab Reihe 3 auf 3 Reihen, also

      select * from table1 ORDER BY 'id' ASC LIMIT 2,3;
      Dieses query wird zurückgeben:

      +------+
      | id   |
      +------+
      |    0 | Zeile 1
      |    1 | Zeile 2
      |    2 | Zeile 3 (Hier beginnt das Result-Set) ZEILE1
      |    3 | Zeile 4                               ZEILE2
      |    4 | Zeile 5 (Hier endet das Result-Set)   ZEILE3
      |    5 | Zeile 6
      |    6 | Zeile 7
      +------+

      Also:

      +------+
      | id   |
      +------+
      |    2 |
      |    3 |
      |    4 |
      +------+

      Jetzt das GLEICHE mit Absteigender Sortierung:
      select * from table1 ORDER BY 'id' DESC LIMIT 2,3;

      +------+
      | id   |
      +------+
      |    6 | Zeile 1
      |    5 | Zeile 2
      |    4 | Zeile 3 (Hier beginnt das Result-Set) ZEILE1
      |    3 | Zeile 4                               ZEILE2
      |    2 | Zeile 5 (Hier endet das Result-Set)   ZEILE3
      |    1 | Zeile 6
      |    0 | Zeile 7
      +------+

      Also:

      +------+
      | id   |
      +------+
      |    4 |
      |    3 |
      |    2 |
      +------+

      Dies ist nur scheinbar das gleiche, weil wir LIMIT 2,3 wählten.

      Testet man das Ganze einmal mit LIMIT 4,2 wird man feststellen, dass sich die Result-Sets unterscheiden. Und das muss man WISSEN, nicht vermuten. Denn Descending heisst eben nicht umgedrehtes Resultset, sondern absteigende Sortierreihenfolge!

      select * from table1 ORDER BY 'id' ASC LIMIT 4,2;
      +------+
      | id   |
      +------+
      |    4 |
      |    5 |
      +------+

      UND
      select * from table1 ORDER BY 'id' DESC LIMIT 4,2;
      +------+
      | id   |
      +------+
      |    2 |
      |    1 |
      +------+

      Viele Grüße Lars

      P.S.: Vielleicht noch eine kleine Verbesserung von meinem letzten Posting. Da schrieb ich, dass das Offset die Anzahl von Reihen wäre. Das stimmt natürlich nicht. Das Offset ist "Beginn nach Zeile". Woraus sich die Syntax

      LIMIT [Offset,] Rows

      ableiten lässt.

      1. Hallo,
        du musst nicht alles so streng sehen.

        Aber sry, es stimmt das er dann 15 anstatt 5 ausgibt.
        Mein Fehler ^^.

        Und das ORDER by id desc war nur ein BEISPIEL....
        Das geht auch mit jedem anderem Feld.

        MFG
        Andavos

        --
        http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
        1. Hallo,
          du musst nicht alles so streng sehen.

          OK

          Aber sry, es stimmt das er dann 15 anstatt 5 ausgibt.
          Mein Fehler ^^.

          Kein Problem, hoffe, etwas Klarheit in die LIMIT-Frage gebracht zu haben :-)

          Ciao Lars

          1. Hallo,
            naja mir wars schon vorher bekannt, hab aber nicht lang genug überlegt, sondern einfach auf Absenden gedrückt.

            Also benutzt:

            ... LIMIT 10, 5 ...

            Dort halt die Zahlen eingeben, die du brauchst.

            Mit etwas Übung bekommst du das schon hin

            MFG
            Andavos

            --
            http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr