Blätterfunktion ergänzen

rernanded

Erfahrenes Mitglied
Hi, ich muß in mein Blätterscript ein DESC LIMIT 301,1000 einbauen, ich weiß nur nicht wie und wo? Hab schon einiges probiert klappt aber nicht.

Moni

PHP:
<?php
     
    $host = "";
    $user = "";
    $pass = "";
    $dbase = "";
 
    $connection = mysql_connect("$host" , "$user" , "$pass") 
                  OR die ("Keine Verbindung zur Datenbank möglich.");
    $db = mysql_select_db($dbase , $connection) 
                  OR die ("Auswahl der Datenbank nicht möglich."); 
         
    $pfad = $_SERVER['PHP_SELF'];
     
    $query = mysql_query("SELECT id FROM news");
             
    $datensaetze_pro_seite = "10";
    $p = "5";                                // SEITENLINKS
     
    $total = mysql_num_rows($query);
    $seiten = ceil($total / $datensaetze_pro_seite);
         
    if(empty($_GET['go'])){
     
        $go = 1;
     
    }elseif($_GET['go'] <= 0 || $_GET['go'] > $seiten){
     
        $go = 1;
 
    }else{
     
        $go = mysql_real_escape_string($_GET['go']);
    }
     
    $links = array();
     
    if(($go - $p) < 1){ $davor = $go - 1;  }else { $davor = $p; }           
     
    if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; }  
            
    $off = ($go - $davor);  
                     
    if ($go- $davor > 1){      
        $first = 1;
        //$links[] = "<a href=\"$pfad?go=$first\" title=\"zur ersten Seite\"> || </a>\n";     
    }     
     
    if($go != 1){         
        $prev = $go-1;
        //$links[] = "<a href=\"$pfad?go=$prev\" title=\"eine Seite zurück\"> < </a>\n";    
    }  
            
            
    for($i = $off; $i <= ($go + $danach); $i++){
     
      if ($i != $go){          
       
            $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";
             
      }elseif($i == $seiten) {         
         
            $links[] = "<span class=\"current\">[ $i ]</span>\n"; 
             
      }elseif($i == $go){          
       
            $links[] = "<span class=\"current\">[ $i ]</span>\n";
             
      } // close if $i     
    }               
     
    if($go != $seiten){      
        $next = $go+1;
        //$links[] = "<a href=\"$pfad?go=$next\" title=\"eine Seite weiter\"> > </a>\n";
    }     
         
    if($seiten - $go - $p > 0 ){  
        $last = $seiten;
        //$links[] = "<a href=\"$pfad?go=$last\" title=\"zur letzten Seite\"> || </a>\n";
    }     
     
    $start = ($go-1) * $datensaetze_pro_seite; 
     
     
    $link_string = implode(" ", $links); 
     
    $abfrage = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start,$datensaetze_pro_seite");

    while($row = mysql_fetch_object($abfrage)){
         
    echo "<big>$row->headline</big><br>[$row->monat_jahr . $row->id]<br>";
    echo nl2br(substr ($row->text,0,100)), " ...";
    echo "<br>$row->link<br><br>";
     
    } 
     
    // Seitennavigation
          
     echo "Seite ".$go." von ".$seiten."<br>";
     
     echo $link_string;
         
     
    ?>
 
... DESC LIMIT 301,1000 ...

Verstehe ich nicht.

"DESC" gehört zu "ORDER BY" und würde die Datensätze absteigend sortieren.

"LIMIT 301, 1000" würde die Anzeige auf die Datensätze 301 bis 1000 beschränken.

Das würde theoretisch Sinn machen aber nur theoretisch da du mit fest vorgegebenen Werten arbeitest.

Meinst du vielleicht das:

PHP:
$abfrage = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start, ($start + $datensaetze_pro_seite)");
 
@tombe: Danke Dir. Die Blätterfunktion wie ich sie habe zeigt mir immer alle Datensätze an. Setze ich ORDER BY id ASC ein alle Datensätze aufsteigend von id=1 bis id=x, setze ich ORDER bY id DESC ein alle Datensätze absteigend von id=x bis id=1. Und das jeweils 10 pro Seite. Soweit alles korrekt. x ist der letzte Datensatz und variabel da die Zahl der Datensätze weiter steigt.

Ich will das nur die aktuellsten Datensätze angezeigt werden (allerdings nicht die topaktuellsten 300 weil die mit einem anderen Script angezeigt werden) und ich will deshalb mit meinem hier benutzten Script das auf der ersten Seite oben der erste Datensatz id=x-301 steht. Der zweite id=x-302 folgt, dann id=x-303 usw.
Und ich will das insgesamt nur 1000 Datensätze angezeigt werden. Bei 10 Einträgen pro Seite ergäbe das also 70 Seiten also alle Datensätze zwischen id=x-301 und id=x-1000.

WIe und wo baue ich das ein.

Moni
 
Zuletzt bearbeitet:
Und ich will das insgesamt nur 1000 Datensätze angezeigt werden. Bei 10 Einträgen pro Seite ergäbe das also 70 Seiten also alle Datensätze zwischen id=x-301 und id=x-1000.

WIe und wo baue ich das ein.

Moni

Ich glaub du hast es mit dem LIMIT falsch (oder ich täusche mich ^^) verstanden mit LIMIT legts du fest wie viele datensätze du angezeigt haben möchtest oder ab welchen er anfangen soll und wann er enden soll

z.B. mit LIMIT 100,200 lässt du dir datensätze ab 100 bis 200 anzeigen und nicht die id 100 bis 200
 
@yugeen
Nein ich weiß schon um was es geht und was LIMIT x,y bedeutet.
Ich denke nur das Problem ist wie von tombe angedeutet das feststehende LIMIT im Script:
PHP:
ORDER BY id DESC LIMIT $start,$datensaetze_pro_seite
wodurch die Blätterfunktion erst möglich wird. Und die ist darauf ausgelegt alle Datensätze ohne Einschränkung zu berücksichtigen.

Wie und wo kann ich da meine 301,1000 unterbringen? Vllt muß eine ganz neue Blätterfunktion her, hab nur bisher noch nichts gefunden. Bin auch in php nicht so bewandert das ich das mal eben selbst machen kann.

Moni
 
Zuletzt bearbeitet:
Hi,

ich muss hier dringend Fehlinformationen berichtigen.

z.B. mit LIMIT 100,200 lässt du dir datensätze ab 100 bis 200 anzeigen und nicht die id 100 bis 200

Was?

LIMIT legt nicht die Range der Datensätze fest, sondern die Anzahl der zu überspringenden Datensätze und die Anzahl der zurückzugebenen Datensätze.

Syntax:
Code:
SELECT ... FROM ... [WHERE ...] [GROUP BY ...] [ORDER BY ...] LIMIT [offset,] row_count

LIMIT 100, 200 übersrpingt 100 Datensätze und gibt 200 Datensätze zurück! Es werden also die Datensätze 101 bis 300 zurückgegeben.

Mehr Informationen zum SELECT STATEMENT findest du im MySQL Handbuch.

Gruß Kyoya Stefan
 
Zuletzt bearbeitet:
@kyoya
Stimmt genau deshalb habe ich ja Yugeen auch geantwortet. ZITAT: Nein, ich weiß schon um was es geht und was LIMIT x,y bedeutet. Siehe auch meinen Thread von 16.21h(geändert 16.25h).
Doch was hilft mir das für mein eigentliches Problem?
Moni
 
Zuletzt bearbeitet:
Um noch was zum Thema an sich beizutragen:

Der Query
Code:
SELECT * FROM `news` ORDER BY `id` DESC LIMIT 300, 1000
sollte das Problem lösen.
Andernfalls sind entweder die IDs nicht fortlaufend oder du hast keine weniger als 301 Datensätze in der Tabelle. Wobei bei Zweiterem ein leeres Result-Set zurückkommt.

Willst du hingegen die letzten 300 IDs hardcoded ausschließen, sieht der Query wie folgt aus:
Code:
SELECT * FROM `news` WHERE `id` < (SELECT MAX(`id`) - 300 FROM `news`) ORDER BY `id` DESC LIMIT 1000

Gruß Kyoya Stefan
 
Zuletzt bearbeitet:
Nach ein paar Minuten überlegen und dem nochmaligen Lesen des Sourcecodes, meine ich den Fehler gefunden zu haben:
PHP:
$datensaetze_pro_seite = "10";

Die Werte für das Limit müßtest du wie folgt berechnen:
PHP:
$rowsPerPage = 1000;
$offset = ($page - 1) * $rowsPerPage + 300;
$sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT $offset, $rowsPerPage";

Gruß Kyoya Stefan
 
Zuletzt bearbeitet:
@Kyoya
Dein Thread von 19.10h/19.17h funktioniert jedenfalls nicht.
Den nächsten von 19.42h/19.44h probier ich noch. Danke schon mal. Ich meld mich wieder.

Moni
 
Zurück