volt: MYSQL LIMIT

Hallo Welt,

SELECT FROM * tabelle LIMIT X,Y

kann mir jemand verraten, wie ich X herausbekomme, wenn in dieser Zeile eine bestimmte(!) id steht? Ich möchte von dieser Zeile beginnen die nächsten Y auszulesen.

Danke

  1. Hello,

    SELECT FROM * tabelle LIMIT X,Y

    kann mir jemand verraten, wie ich X herausbekomme, wenn in dieser Zeile eine bestimmte(!) id steht? Ich möchte von dieser Zeile beginnen die nächsten Y auszulesen.

    Da müsstest Du schon ein paar mehr Angaben machen.
    "Sortierung" wäre z.B. ein Stichwort.
    "Filter" ein weiteres

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. sortierung? keine sortierung. chronologisch.

      kein filter?! ich möchte ab eintrag mit id die nächsten y auslesen... mehr nicht...

      ich müsste dazu wahrscheinlich eine funktion schreiben, die mir die zeilennummer des eintrages mit der id ausliest und in dieser zweiten mysql-anfrage dann das X mit dem ausgelesenen wert ergänzen...

      oder?

      1. Hello,

        sortierung? keine sortierung. chronologisch.

        Also chronlogische Sortierung.
        Wie stellst Du die sicher?

        kein filter?! ich möchte ab eintrag mit id die nächsten y auslesen... mehr nicht...

        Eine SQL-Tabelle ist per default eine ungerichtete Menge.
        Die Elemente haben also keinen Vorgänger und keinen Nachfolger.
        Das erreicht man erst durch die Einführung einer Richtung und Orientierung, also einer Sortierung aufsteigend oder absteigend nach einer Regel. Mittles dieser Regel kann man dann einen (temporären) Index über die Menge legen.

        Harzliche Grüße vom Berg
        esst mehr http://www.harte-harzer.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. mit select...limit x,y lese ich doch zeile x+1 bis inkl. zeile y aus.. oder? das ist doch chronologisch. oder?! :) anscheinend existiert für diese abfrage eine reihenfolge der zeilen in der tabelle...

          $line=getLastId($id);
          $mysql_query="SELECT * FROM project LIMIT ".$line.", ".$epp."";
          $mysql_ressource = mysql_query($mysql_query) or die(mysql_error());

          while ($data_result = mysql_fetch_array($mysql_ressource)) {
           array_push($data, $data_result);
          }

          das passiert.. wenn ich für $line $id nehmen könnte - wäre die welt ja in ordnung... aber so?!

          wie bekomme ich $line heraus wenn ich $id gegeben habe?!

          1. hi,

            mit select...limit x,y lese ich doch zeile x+1 bis inkl. zeile y aus.. oder? das ist doch chronologisch. oder?!

            Nein.

            :) anscheinend existiert für diese abfrage eine reihenfolge der zeilen in der tabelle...

            Die Einträge werden dir, wenn du kein Sortierkriterium angibst, in einer zufälligen Reihenfolge zurückgeliefert.
            Dass diese vielleicht derzeit mit der von dir _gewünschten_ Reihenfolge übereinstimmen mag, ist vollkommen ohne Belang - und _kann_ außerdem schon nach der nächsten Änderung des DB-Inhaltes anders aussehen.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. ich scheine zu ahnen, worauf ihr hinaus wollt. okay. es fehlt also soetwas wie order by. zum beispiel nach zeit. gut. dies mit berücksichtigt, wie kann ich dann sagen, dass ich AB eintrag mit ID die nächsten (chronologischen) Einträge mit begrenzter Anzahl in das array lese?

              Ich gebe ID an und möchte davon die nächsten Einträge in das Array lesen. mehr net...

              1. yo,

                Ich gebe ID an und möchte davon die nächsten Einträge in das Array lesen. mehr net...

                das problem, was dir die beiden klarmachen wollen ist, dass du die "nächsten" genau spezifizieren musst. eine id kann dafür per definition nicht herhalten. in aller regel fügt man dazu in den einzelnen datensätze eine zeit und datumsangae ein, die beim erstellen eines neues datensatz die aktuelle zeit einträgt. nach dieser kannst du dann das ORDER BY absetzen und damit mit LIMIT limitieren...

                Ilja

                1. Hallo Welt,

                  $mysql_query="SELECT * FROM table ORDER BY id DESC LIMIT X,10";

                  Kann mir jemand verraten, wie ich X herausbekomme, wenn ich eine id gegeben habe?

                  vielen dank

                  1. Hello,

                    $mysql_query="SELECT * FROM table ORDER BY id DESC LIMIT X,10";

                    Kann mir jemand verraten, wie ich X herausbekomme, wenn ich eine id gegeben habe?

                    Also nehmen wir jetzt einfach mal an, du hättest Deine tabelle nach der ID sortiert und würdest auch beim Eintragen dafür gesorgt haben, dass die ID immer hochgezählt wird...

                    SELECT <feldliste>
                      FROM <tabellenname>
                      WHERE ID < X
                      ORDER BY ID DESC
                      LIMIT 10;

                    Das wäre dann Dein Statement, aber eben bitte wirklich unter dem Vorbehalt, dass das Incrementieren der ID auch wirklich sauber funktioniert.

                    Harzliche Grüße vom Berg
                    esst mehr http://www.harte-harzer.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                  2. yo,

                    Kann mir jemand verraten, wie ich X herausbekomme, wenn ich eine id gegeben habe?

                    wer nicht hören will, der muss fühlen....

                    SELECT *
                    FROM table
                    WHERE id >= $gegebene_id
                    ORDER BY id DESC LIMIT 10

                    Ilja

                    1. yo,

                      muss heißen:

                      ORDER BY id LIMIT 10

                      da ist mir doch beim kopieren das DESC untergekommen.....

                      Ilja

          2. Hello,

            mit select...limit x,y lese ich doch zeile x+1 bis inkl. zeile y aus.. oder? das ist doch chronologisch. oder?! :) anscheinend existiert für diese abfrage eine reihenfolge der zeilen in der tabelle...

            Aber nur eine temporäre.
            Es ist per Definition der Datenbankmaschine selbst überlassen, wie sie ihre Tabellen organsisiert. Da SQL i.d.R. in Multiuserumgebungen eingesetzt wird, kann sich die generische Reihenfolge der Datensätze in einer Tabelle von einer Sekunde auf die andere ändern.

            Es gibt auch Systeme, die zwischendurch einfach mal ihre Tebellen optimieren. Dann hast Du den Effekt mit dem "neu gemischt" auch als Einzelbenutzer.

            Du musst also erstmal das Kriterium "chronologisch" genauer definieren und insbesondere die Methoden für ein Insert und/oder Update festlegen. Willst Du ein Zeitraster verwenden, oder die IDs definiert immer automatisch raufzählen lassen. Da hält sich MySQL übrigens bedeckt, ob das immer funktionieren wird. Autoincrement ist nicht gleich Autoincrement. Also erst das handbuch genau lesen, dann erst coden.

            Harzliche Grüße vom Berg
            esst mehr http://www.harte-harzer.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
      2. hi,

        sortierung? keine sortierung. chronologisch.

        Also doch sortiert.

        kein filter?! ich möchte ab eintrag mit id die nächsten y auslesen... mehr nicht...

        Dann tu das doch.
        Du suchst den ersten (LIMIT) Eintrag, dessen ID größer als die des Datensatzes mit der ID xy ist (WHERE-Klausel, ORDER BY).

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hello,

          sortierung? keine sortierung. chronologisch.

          Also doch sortiert.

          kein filter?! ich möchte ab eintrag mit id die nächsten y auslesen... mehr nicht...

          Dann tu das doch.
          Du suchst den ersten (LIMIT) Eintrag, dessen ID größer als die des Datensatzes mit der ID xy ist (WHERE-Klausel, ORDER BY).

          *äh* Er sagte doch chronologisch und nicht nach ID sortiert. Die ID erhebt (erstmal) überhaupt keinen Anspruch auf Chronologie.

          Harzliche Grüße vom Berg
          esst mehr http://www.harte-harzer.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. hi,

            *äh* Er sagte doch chronologisch und nicht nach ID sortiert.

            Ja, das stimmt natürlich.

            Die ID erhebt (erstmal) überhaupt keinen Anspruch auf Chronologie.

            Also müsste er uns erst mal sein Sortierkriterium für diese Chronologie nennen.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo Welt,

    $mysql_query="SELECT * FROM table ORDER BY id DESC LIMIT X,10";

    Kann mir jemand verraten, wie ich X herausbekomme, wenn ich eine id gegeben habe?

    vielen dank

    1. Moin!

      Hallo Welt,

      $mysql_query="SELECT * FROM table ORDER BY id DESC LIMIT X,10";

      Kann mir jemand verraten, wie ich X herausbekomme, wenn ich eine id gegeben habe?

      • Erstens der Stern ist böse[tm]. Gib die Spalten an, damit Du weisst, was Du tust.
      • Zweitens, wenn die Spalte eine 'ID' ist, dann ist das DESC mehr als überflüssig, weil die IDs nur einmal vorkommen sollten. In jedem anderen Fall hast Du eine Falle für später eingebaut, weil Du sicher auch irgendwann mal davon ausgehen wirst 'ID' sei ein 'identifier', also eindeutig.

      Zu Deiner Frage.

      Frag die Datenbank zweimal.

      $mysql_query='SELECT count(id) AS intX FROM table WHERE id < '.$id;

      Es werden die IDs gezählt, die kleiner sind als die gegebene ID.

      ...

      $mysql_query='SELECT dies, das jenes, FROM table ORDER BY id LIMIT '.$intX.' ,10';

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
      1. Moin!

        • Zweitens, wenn die Spalte eine 'ID' ist, dann ist das DESC mehr als überflüssig,

        Ok. Leute. Das war zuviel für den fastix: Ich bin heute morgen 4 Uhr aus dem Bett gestiegen, in welches ich gleich falle und hatte einen 10 Stunden-Tag _und_ ca. 400 km auf verstopfter Autobahn, heute morgen(!) dazu noch heftiges Gewitter.

        Das DESC dient zur umgedrehten Sortierung. Ist klar. Ich geh schlafen, bevor ich noch mehr Unsinn fabriziere.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    2. Moin!

      $mysql_query="SELECT * FROM table ORDER BY id DESC LIMIT X,10";

      Kann mir jemand verraten, wie ich X herausbekomme, wenn ich eine id gegeben habe?

      Oder (viel) besser:

      $intAbId=123;

      $mysql_query='SELECT dies, das, jenes FROM table WHERE id >='.$intAbId.' ORDER BY id LIMIT 10';

      Du brauchst keinen Startwert, da ja ab der ID- ausgegeben wird, nur das Limit für die Anzahl :)

      Immer noch Voraussetzung: Die ID ist eindeutig.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    3. hi,

      hast du einen Sprung in der Platte?

      Es ist wenig hilfreich, wenn du lediglich deine ursprüngliche Frage mehrmals wiederholt stellst, ohne dir Gedanken um die berechtigten Einwände, die geäußert wurden, zu machen.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }