Kevin: MySQL Abfrage seitenweise darstellen

Hallo

Ich möchte einen Datenbank Abfrage seitenweise darstellen. Ich weiss, dass ich bei der DB mit der LIMIT Funktion arbeiten muss.

Ich stehe nur bei der Realisation an. Habe irgend wie ein Knopf im Hirn. Ich weiss, dass ich zuerst mal die DB auslesen muss, wie viele Einträge es total gibt. Danach kann ich die LIMIT Funktion für die schrittweise Ausgabe verwenden, nur wie sieht so ein Perl-Script sinnvollerweise aus?

Hat jemand einen guten Link zu diesem Thema oder evtl. einen Tipp?

Lieben Dank.

KEVIN

  1. Hat jemand einen guten Link zu diesem Thema oder evtl. einen Tipp?

    Das ist ein bisschen wage und "so" ein Skript gibt es nicht.
    Die Anzahl der Der Ergenisse muss du mit einer separaten Abfrage Anbfrage machen, da dir DBI->rows nur die Anzahl der Reihen der Abfrage übergibt.

    Den Rest musst du selber ausrechnen kommt gnaz darauf an wie du es gerne hättest.

    Struppi.

  2. Hallo

    Ich möchte einen Datenbank Abfrage seitenweise darstellen. Ich weiss, dass ich bei der DB mit der LIMIT Funktion arbeiten muss.

    Ich stehe nur bei der Realisation an. Habe irgend wie ein Knopf im Hirn. Ich weiss, dass ich zuerst mal die DB auslesen muss, wie viele Einträge es total gibt. Danach kann ich die LIMIT Funktion für die schrittweise Ausgabe verwenden, nur wie sieht so ein Perl-Script sinnvollerweise aus?

    Du hast es doch eigentlich schon beschrieben.

    Ein select count(*) ... wenn Du wissen willst, wieviele Saetze es im Ergebnis gibt.

    Dann jeweils ein select ... limit x, y order by ... für die einzelnen Seiten, wobei x und y für den Startsatz und die Anzahl (z.B. immer 10 auf einer Seite) stehen und das order by dafür sorgt, daß Du eine definierte Reihenfolge hast.

    Nick

    --
    --------------------------------------------------
    http://www.xilp.eu
    XILP Internet Links People
    Dein persoenliches privates Netzwerk
    aus Freunden, Verwandten, Bekannten und Kollegen.
    --------------------------------------------------
    Hamburg Berlin München
    1. Hi Nick

      Die Theorie ist mir schon klar. Nur wie sieht das in der Praxis aus.

      DB Abfrage ist mir klar, nur wie Code ich das, dass es auch mit dem Blättern klappt. ich muss ja noch einen Link ausgeben zum vor und zurück blättern. Da muss ich ja ermitteln auf welcher Seite ich stehe und ob es da noch vor oder zurück geht.

      An dem zerbreche ich mir den Kopf. Ich habe so was noch nie programmiert und bin da etwas ratlos wie so eine Funktion aussehen sollte.

      Die Anzahl Seiten ermitteln is auch noch einfach. Da nehem ich die DB Abfrage und dividiere Sie durch Anzahl seiten. Das sieht dann etwa so aus:

      $dbh = DBI->connect($db_dsb, $sqlusr, $sqlpw) or return $sqlmsg = "MySQL Verbindungsfehler: $DBI::errstr";

      $sql = "SELECT * FROM archive WHERE id='$check'";

      $sth = $dbh->prepare($sql);
      $sth->execute();

      $results = $sth->rows;

      $results_per_page = 10;
      $pagesrequired = ceil($results / $results_per_page);

      Ich benötige irgend einen Link oder ein Code-Schnippel wie das weiter zu lösen ist, dann komme ich schon auf die Spur nur ich sehe es im Moment wirklich nicht. Habe da irgend wie ein Blackout.

      1. Die Anzahl Seiten ermitteln is auch noch einfach. Da nehem ich die DB Abfrage und dividiere Sie durch Anzahl seiten. Das sieht dann etwa so aus:

        Du brauchst dann noch einen CGI Parameter, der die die aktuelle Seite anzeigt.

        my $page = CGI::param('page') || 0;

        $dbh = DBI->connect($db_dsb, $sqlusr, $sqlpw) or return $sqlmsg = "MySQL Verbindungsfehler: $DBI::errstr";

        $sql = "SELECT * FROM archive WHERE id='$check'";

        eher so

        $sql = "SELECT count(id) FROM archive order id";

        $sth = $dbh->prepare($sql);
        $sth->execute();

        $results = $sth->rows;

        Jetzt musst du die Links ausgeben:

        my $limit = 10;
        my $pages = int( $result / $limit );

        for(0..$pages) {
        print CGI::a( {-href => '?page=' . $_}, $_ );
        }
        my $start = $page * $limit;

        $sql = "SELECT count(id) FROM archive LIMIT $start, $limit order id";
        $sth = $dbh->prepare($sql);
        $sth->execute();
        und halt das Ergebniss der Abfrage ausgeben.

        Struppi.

        1. Du brauchst dann noch einen CGI Parameter, der die die aktuelle Seite anzeigt.

          Oder den Startwert (so mache ich es):

          my $start = $cgi->param('start') || 0;  
          my $anzahl = 10;  
          my $sql = 'SELECT COUNT(id) AS anzahl FROM tabelle';  
          # Ausführen der Abfrage  
          my %row = $query->fetchrow_hash();  
          my $max = $row{'anzahl'} || 0;  
          my $seite = 0;  
          while($start<=$max) {  
            print CGI::a( {-href => '?start=' . $start}, $seite );  
            $seite++;  
            $start += $anzahl;  
          }
          

          Nur so als zweites Beispiel.

          Siechfred

          --
          Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.