SQL Abfrage mit Blaetterfunktion



  • Hallo...

    seit einiger Zeit bin ich dabei, die Suchfunktion einer SQL-gestuetzten PHP-Seite zu ueberarbeiten.
    Die Datenbankabfrage stellt dabei kein Problem dar.

    Als ergebnis der Abfrage erhalte ich ca. 100 Ergebnisse (die Zahl variiert).
    nun möchte ich unten auf der Ausgabeseite eine Blätterfunktion wie bei normalen Suchmaschinen (google usw.) einbauen.

    1 2 3 ==>4<== 5 6

    Wie krieg ich mein Script nun dazu, z.B. ==>1<== 2 3 4 5 6 7 8 9 10 auszugeben und bei einem Click auf

    3. 1 2 ==>3<== 4 5 6 7 8 9 10 usw.

    Ich habe von einem Script namens search.php3 gehoert, dass aber nicht mehr als Download funktioniert.

    Wenn jemand versteht, wass ich meine kann mir hoffentlich jemand weiterhelfen.

    ==>Eisbeer<==

    $anzahl_ergebnisse = 1;
    
    if(empty($_REQUEST['start']))
    {
    $start=0;
    }
    
    else
    {
    $start = $_REQUEST['start'];
    }
    
    $query = "SELECT * FROM XXXX WHERE XXXX = 'XXX' OR XXXX = 'XXXX' ORDER BY XXX ASC LIMIT 
    
    $start,$anzahl_ergebnisse"; //Werte aus Tabelle XXXX holen
    $result = mysql_query($query); //Rueckgabe Resource
    
    ///////////////////////////
    echo'<div id="text_zentriert">'."\n";
    
    $anzahl_der_seiten = $anzahl_gesamt / $anzahl_ergebnisse;
    $anzahl_der_seiten = ceil("$anzahl_der_seiten"); //Aufrunden
    
    $mystart = 0;
    
    for($zahlzahlenreihe=1;$zahlzahlenreihe<=$anzahl_der_seiten; $zahlzahlenreihe++)
    {                               
    if("$start" == "$mystart")
    {
    echo'<span id="text_weiss">'."$zahlzahlenreihe".'</span>'."\n";
    }
    
    else
    {
    echo'<a href="'.$_SESSION['MyURL'].'/php/xyz.php5?
    
    start='."$mystart".'">'."$zahlzahlenreihe".'</a>'."\n";
    }
    
    $mystart+=$anzahl_ergebnisse;
    }
    
    echo'</div><p>'."\n";
    ///////////////////////////
    

    Moderiert von árn[y]ék:
    Bitte PHP-Tags verwenden, die gibt's nicht ohne Grund ...



  • Dein Suchbegriff lautet "php sql-paging".

    Da gibt's dann z.B.: http://www.selfhtml.de/forum/zeigebeitrag_4_121928_121832_0.php



  • Danke für den Link, es funktioniert ja soweit auch.

    Nur möchte ich dass am Anfang z.B. '=1= 2 3 4 5 6 7 8 9 10' erscheint und

    danach bei einem Click auf z.B. 8 '1 2 3 4 5 6 7 =8= 9 10 11 12 13 14 15 16 17'

    danach bei 15 '5 6 7 8 9 10 11 12 13 14 =15= 16 17 18 19 20 21 22 23 24' usw.

    Leider finde ich keinerlei Beispiele hierzu 😞
    Ich möchte keinen fertigen Code benutzen, sondern meinen eigenen erweitern.

    Danke ==>Eisbeer<==



  • Die Zahlen musst du selbst ausgeben. Nennt sich paging.
    Kannst ja mal google bemühen ob du was fertiges findest.

    Wenn man auf eine Zahl klickt dann wird diese übergeben.
    Bei MySQL kann man dann mit z.B. LIMIT 100,50 die Datensätze selectiere.
    100 beginnend ab 50.

    Bei ASPNET und MSSQL ist dies in einem Steuerelement nur eine Eigenschaft und alles andere macht da ASPNET.
    Solltest Du MSSQL haben dann hast DU das Problem da MSSQL kein LIMIT ab ROWS X zurückgeben kann.



  • Unix-Tom schrieb:

    Die Zahlen musst du selbst ausgeben. Nennt sich paging.
    Kannst ja mal google bemühen ob du was fertiges findest.

    Das Stichwort "paging" wurde bereits genannt.

    Unix-Tom schrieb:

    Solltest Du MSSQL haben dann hast DU das Problem da MSSQL kein LIMIT ab ROWS X zurückgeben kann.

    Dann muß er das Paging halt mit reinem SQL realisieren.



  • du hast doch in

    $start = $_REQUEST['start'];
    

    die Seite, die Zur Zeit angeschaut wird. Vergleich diese doch einfach in der for schleife...

    if("seitenzahl" = $start) 
    { 
       echo"== $zahlzahlenreihe =="; 
    }
    else
    {
       echo"$zahlzahlenreihe";
    }
    

    hoffe das hilft dir weiter - MfG Reen

    Moderiert von árn[y]ék:
    Bitte PHP-Tags verwenden, die gibt's nicht ohne Grund ...



  • schmidt-webdesign.net schrieb:

    Unix-Tom schrieb:

    Die Zahlen musst du selbst ausgeben. Nennt sich paging.
    Kannst ja mal google bemühen ob du was fertiges findest.

    Das Stichwort "paging" wurde bereits genannt.

    Kann sein aber in der Früh waren eure Postings noch nicht drin. 😕



  • Guten Abend...

    Vorab bedanke ich mich erstmal für die gebotenen Tipps.
    Entschuldigung für die Sache mit den Tags und danke dass sie nachträglich eingebaut wurden.

    Wie ersichtlich ist, benutze ich im SELECT-Befehl das Atribbut LIMIT. Auch die Variable start wird abgefragt. Mein Problem liegt bei der Ausgabe der Zahlen...... (Nicht im SQL-Part)

    Das Script benötigt noch eine Schleife in der Ausgabe-Schleife der Zahlen.

    Ich habe momentan sehr wenig Zeit, mich darum zu kümmern und hoffe auf einen Denk-Anstoß.

    ==>Eisbeer<==



  • Was du braucht ist die Anzahl. Braucht also 2 Querys.
    Einmal mit Count und einmal mit LIMIT.

    Wenn du die Anzahl weißt sollte die schleife kein Problem sein.



  • Unix-Tom schrieb:

    Was du braucht ist die Anzahl. Braucht also 2 Querys.
    Einmal mit Count und einmal mit LIMIT.

    LIMIT braucht's nun wirklich nicht (es gehört ohnehin nicht zu Standard-ɛskjuːˈɛl).



  • Ich habe 2 querys einmal die Anzahl aller Ergebnisse und einmal die zu holenden Datensätze.

    UNIX-Tom hat´s erkannt: Ich habe nur das Problem, dass meine Schleife bis jetzt ALLE Ergebnisse in einer Reihe anzeigt. (Ich meine nur die Seitenzahlen).

    Genau hier liegt der Hase begraben...

    $anzahl_der_seiten = $anzahl_gesamt / $anzahl_ergebnisse;
    

    ==>Eisbeer<==



  • Wie Du HTML erzeugst brauche ich ja nicht zu erklären.

    Du hast also die Anzahl ROWS.
    Durch LIMIT nun auch eine Begrenzte Ergebnismenge.

    Sie Dir den LIMIT nochmals an. Dort kann mann nicht nur angeben wieviele ROWS sondern auch ab wann beginnend.
    Also LIMIT 100,50
    Die Anzahl Zeilen pro Seite sollte Dir bekannt sein.

    Gesamtrows/PROSEITE = Anzahl Seiten

    Du schreibst die ersten ROWS ins HTML an den Client.
    Unten dann Ausgabe einer Tabelle,CSS oder was auch immer für die einzelnen Zahlen.
    Die Zahlen sind Links denen Du die Seite übergibst.
    Angenommen 10 Zeilen Pro Seite
    Bei Limit dann immer
    LIMIT 1,10
    LIMIT 11,10
    LIMIT 21,10

    u.s.w.
    Kenne Deine DB und die Anzahl GESAMTROWS nicht aber manchmal ist es besser nicht LIMIT zu verwenden.

    http://dev.mysql.com/doc/refman/5.1/de/limit-optimization.html

    Andere RDBMS habe kein LIMIT. MSSQL ist es TOP ohne Offset wobei man aber den Offset wiederum simulieren kann.



  • Hallo,

    ich habe den Code folgender Maßen abgeändert:

    ///////////////////////////
    echo'<div id="text_zentriert">'."\n";
    
    $anzahl_der_seiten = $anzahl_gesamt / $anzahl_ergebnisse;
    //$anzahl_der_seiten = number_format("$anzahl_der_seiten", 0, ',', '.'); //$anzahl_der_seiten Formatieren
    $anzahl_der_seiten = ceil("$anzahl_der_seiten"); //Aufrunden
    
    if($start >1)
    {
    $zahlzurueck = $start - $anzahl_ergebnisse;
    echo'<a href="'.$_SESSION['MyURL'].'/php/fitness.php5?start='."$zahlzurueck".'">&lt;&lt;</a>'."\n";
    } 
    
    for($zahlzahlenreihe=$start-5;$zahlzahlenreihe<=$start+5; $zahlzahlenreihe++)
    {                               
     if($zahlzahlenreihe >0 && $zahlzahlenreihe <= $anzahl_der_seiten)
       {
        if("$start" == "$zahlzahlenreihe")
           {
            echo'<span id="text_weiss">'."$zahlzahlenreihe".'</span>'."\n";
           }
        else
            {
             echo'<a href="'.$_SESSION['MyURL'].'/php/fitness.php5?start='."$zahlzahlenreihe".'">'."$zahlzahlenreihe".'</a>'."\n";
            }
       }
    }
    
    if($zahlzahlenreihe <=$anzahl_der_seiten)
    {
    $zahlvor = $start + $anzahl_ergebnisse;
    echo'<a href="'.$_SESSION['MyURL'].'/php/fitness.php5?start='."$zahlvor".'">&gt;&gt;</a>'."\n";
    }
    echo'</div><p>'."\n";
    ///////////////////////////
    

    Wie bekomme ich nun immer 10 Seitenzahlen angezeigt ? (z.B. 1-10)

    ==>Eisbeer<==



  • wie viele lösungen willst denn noch? scheinbar biste zu blöd sie umzusetzen!!! 😡 😡 😡


Anmelden zum Antworten