bjoern: Datensätze Anzahlweise auslesen.

Hallo Leute!

Ich programmiere grad ein Gästebuch, welches jeden Eintrag in einen Datensatz in eine MySQL-Datenbank packt.

Nun möchte ich beim Anzeigen der Einträge immer nur 5 Einträge pro Seite zeigen.

Unter den Einträgen sollen Seitenzahlen aufgelistet sein, mit denen man per Mausklick entsprechenden Seiten mit z.B. Eintrag 25-30 anzeigen kann.

Meine Fragen: Wie kann ich die Einträge immer im 5er-Pack auslesen? Wie kann ich unter den Einträgen die Seitenzahlen bringen (Alle einträge/5=Anzahl der Seitenzahlen)?
Wie kann ich wenn jamand auf z.B. Seite 5 drückt die einträge 5*5=25 bis 5*5+5=30 auslesen?

Hat jemand Codeschnipsel/Tutorials, etc.?

Gruß Bjoern

  1. Hallo bjoern,

    Hat jemand Codeschnipsel/Tutorials, etc.?

    Was hast du probiert und woran bist du gescheitert?

    Du kennst for und foreach?

    Grüße aus Barsinghausen,
    Fabian

    --
    "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
    1. Hallo Fabian!

      Was hast du probiert und woran bist du gescheitert?

      Mein größtes Problem ist, dass ich die SQL-Abfrage nicht hinbekomme mit der ich z.B. Datensatz 25-30 auslesen kann.

      Nach der auto_increment id kann ich nicht gehen, da einzelne Datensäte gelöscht sein könnnen/fehlen. Es könnten somit leere Seiten bzw. Seiten mit nicht 5 Datensätzen entstehen.

      Woran soll ich mich orientieren?

      Z.B. hat der 25te Eintrag schon die id 32 da 7 Einträge gelöscht wurden.

      Gruß Björn

      1. Hello,

        Mein größtes Problem ist, dass ich die SQL-Abfrage nicht hinbekomme mit der ich z.B. Datensatz 25-30 auslesen kann.

        Nach der auto_increment id kann ich nicht gehen, da einzelne Datensäte gelöscht sein könnnen/fehlen. Es könnten somit leere Seiten bzw. Seiten mit nicht 5 Datensätzen entstehen.

        Diese Frage ist gar nicht so trivial, wie man glauben könnte.

        Mit einem einfachen "Limit $offset $count" kann man sie jedenfalls nicht beantworten, wird sie aber gerne beantwortet. Und für den Simpel-Fall reicht das auch.

        Wenn man aber vermeiden möchte, dass beim Blättern versehentlich Sätze übersehen werden können, da andere berechtigte User inzwischen Änderungen vorgenommen haben, die Auswirlung auf die  Ergebnistabelle haben, dann wird es komplex.

        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. Hallo Tom,

          Wenn man aber vermeiden möchte, dass beim Blättern versehentlich Sätze übersehen werden können, da andere berechtigte User inzwischen Änderungen vorgenommen haben, die Auswirlung auf die  Ergebnistabelle haben, dann wird es komplex.

          Ich glaube nicht, dass es hier nötig wird, für ein _privates_ Gästebuch auf LOCKs und der Gleichen zurückzugreifen, da es im Idealfall nur einen administrationsbefugten Benutzer geben *sollte*.

          Grüße aus Barsinghausen,
          Fabian

          --
          "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
          1. Hello,

            Ich glaube nicht, dass es hier nötig wird, für ein _privates_ Gästebuch auf LOCKs und der Gleichen zurückzugreifen, da es im Idealfall nur einen administrationsbefugten Benutzer geben *sollte*.

            Von Locks war nicht dir Rede.
            Ggf. benötigt man zusammengesetzte Schlüssel, um Duplicates handhaben zu können.
            Aber für einfache Anwendungen (wie Du ja annimmst) wäre das tatsächlich überskaliert.

            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. Hello Bjoern,

    hast Du schon mal unter dem Stichwort "blättern" im Archiv gesucht?

    Da gibt es bestimmt fünf bis zehn fertige Funktionen und ausführliche Beschreibungen zum Thema.

    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 Tom!

      hast Du schon mal unter dem Stichwort "blättern" im Archiv gesucht?

      Hab im Archiv gesucht, aber nicht dass gefunden was ich suche.
      Mir wäre geholfen, wenn mir jemand sagen kann, wie ich den z.B. 25ten Datensatz einer Datenbank als diesen Identifizieren kann, auch ohne id.

      P.S.: Wo findest du die Funktionen wenn du nach blättern suchst?

      Gruß
      Björn

      1. Hello,

        P.S.: Wo findest du die Funktionen wenn du nach blättern suchst?

        gib ein   "category:PHP blättern"

        Da findest Du auf jeden Fall relevante Threads.
        Habe ich sicherheitshalber eben nochmals überprüft ;o)

        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
  3. echo $begrüßung;

    Nun möchte ich beim Anzeigen der Einträge immer nur 5 Einträge pro Seite zeigen.

    MySQL für Anfänger: SELECT ... FROM ... LIMIT x,y

    Unter den Einträgen sollen Seitenzahlen aufgelistet sein, mit denen man per Mausklick entsprechenden Seiten mit z.B. Eintrag 25-30 anzeigen kann.

    PHP für Fortgeschrittene: PEAR-Package Pager

    echo "$verabschiedung $name";

    1. MySQL für Anfänger: SELECT ... FROM ... LIMIT x,y

      Wird so nicht gehen, da Datensätze bzw. id-nummern fehlen können!

      PHP für Fortgeschrittene: PEAR-Package Pager

      hört sich schon besser an. Man könnte also einfach alle Datensätze auslesen, diese in ein Array packen und dann mit dem Index des Arrays arbeiten.

      Fallbeispiel:

      Seite 1 wird standardmäßig aufgerufen mit den datensätzen die im array auf position 0-4 liegen. Ruf ich nun seite 5 auf, werden die arrayobjekte 24-29 eingelesen. (usw.)

      Übergebe ich einfach die Seite die ich laden möchte (z.B. 1 oder 5)per GET-String, wäre dies nicht recht Resourcenaufreibend, wenn ich dann bei jedem Seitenladen alle Einträge aus der Datenbank auslesen und in das Arry packen müsste?

      Geht dass nicht eleganter?

      Gruß Björn

      1. Hallo bjoern,

        MySQL für Anfänger: SELECT ... FROM ... LIMIT x,y

        Wird so nicht gehen, da Datensätze bzw. id-nummern fehlen können!

        Hast du es ausprobiert?

        Geht dass nicht eleganter?

        Hast du es ausprobiert?

        Grüße aus Barsinghausen,
        Fabian

        --
        "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
      2. echo $begrüßung;

        MySQL für Anfänger: SELECT ... FROM ... LIMIT x,y
        Wird so nicht gehen, da Datensätze bzw. id-nummern fehlen können!

        LIMIT interessiert sich nicht für die Inhalte der Datensätze.

        PHP für Fortgeschrittene: PEAR-Package Pager

        hört sich schon besser an. Man könnte also einfach alle Datensätze auslesen, diese in ein Array packen und dann mit dem Index des Arrays arbeiten.

        Der Pager arbeitet auch ohne die gesamten Daten zu übergeben. Bei drei Gästebucheinträgen ist das nicht weiter wild, aber...
        Es reicht also auch aus, nur ein paar Werte, wie Anzahl der darzustellenden Daten, Daten pro Seite und aktuelle Seite zu übergeben.
        Und der Pager baut dir nur eine Blätterleiste zusammen. Die Darstellung der Daten musst du anderweitig vornehmen.

        echo "$verabschiedung $name";

        1. echo $begrüßung;

          MySQL für Anfänger: SELECT ... FROM ... LIMIT x,y
          Wird so nicht gehen, da Datensätze bzw. id-nummern fehlen können!

          LIMIT interessiert sich nicht für die Inhalte der Datensätze.

          LIMIT 1,5 liefert also IMMER den 1.-5. Datensatz EGAL welche ID der entsprechende auto_increment Wert der Datensätze hat?

          Gruß
          Björn

          1. echo $begrüßung;

            LIMIT 1,5 liefert also IMMER den 1.-5. Datensatz EGAL welche ID der entsprechende auto_increment Wert der Datensätze hat?

            Genauer gesagt: MySQL ermittelt anhand der anderen Parameter in der Query eine Ergebnismenge (eingeschränkt mit WHERE, sortiert mit ORDER BY, usw.). Auf diese Ergebnismenge wird LIMIT angewendet. Übrigens, LIMIT fängt bei 0 an zu zählen.

            Und dann gibt es da noch SQL_CALC_FOUND_ROWS und FOUND_ROWS().

            echo "$verabschiedung $name";