ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
371
371
EMPFEHLEN
-
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-Code:<?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;
?>
-
07.12.11 15:39 #2
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Verstehe ich nicht.... DESC LIMIT 301,1000 ...
"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-Code:$abfrage = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start, ($start + $datensaetze_pro_seite)");
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
@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.
MoniGeändert von rernanded (07.12.11 um 16:25 Uhr)
-
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:wodurch die Blätterfunktion erst möglich wird. Und die ist darauf ausgelegt alle Datensätze ohne Einschränkung zu berücksichtigen.PHP-Code:ORDER BY id DESC LIMIT $start,$datensaetze_pro_seite
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.
MoniGeändert von rernanded (07.12.11 um 17:03 Uhr)
-
Hi,
ich muss hier dringend Fehlinformationen berichtigen.
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 mysql:
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 StefanGeändert von Kyôya (07.12.11 um 19:18 Uhr) Grund: Added Link to MySQL Manual
Oracle Certified MySQL 5 Professional Developer
Zend Certified PHP 5.3 Engineer
Vorträge, Webinare, etc im Mayflower - Blog
-
@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?
MoniGeändert von rernanded (07.12.11 um 19:03 Uhr)
-
Um noch was zum Thema an sich beizutragen:
Der Query
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 mysql:
Gruß Kyoya StefanGeändert von Kyôya (07.12.11 um 19:17 Uhr)
Oracle Certified MySQL 5 Professional Developer
Zend Certified PHP 5.3 Engineer
Vorträge, Webinare, etc im Mayflower - Blog
-
Nach ein paar Minuten überlegen und dem nochmaligen Lesen des Sourcecodes, meine ich den Fehler gefunden zu haben:
Code php:1
$datensaetze_pro_seite = "10";
Die Werte für das Limit müßtest du wie folgt berechnen:
Code php:1 2 3
$rowsPerPage = 1000; $offset = ($page - 1) * $rowsPerPage + 300; $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT $offset, $rowsPerPage";
Gruß Kyoya StefanGeändert von Kyôya (07.12.11 um 19:44 Uhr)
Oracle Certified MySQL 5 Professional Developer
Zend Certified PHP 5.3 Engineer
Vorträge, Webinare, etc im Mayflower - Blog
-
@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
-
@kyoya
Der 2. Versuch klappt mitNICHT aber mitPHP-Code:$datensaetze_pro_seite="1000"
.PHP-Code:$datensaetze_pro_seite="10"
Wo ich die 1000 unterbringen soll bleibt ein Rätsel. Und noch etwas: Wenn ich beidie Zahl 10 ändere zB in 5 oder 3 werden plötzlich leere Seiten erzeugt.PHP-Code:$datensaetze_pro_seite="10"
Moni
-
Warum schriebst du integer in Quotes und warum jagst du $_GET['go'] durch mysql_real_escape_string?
Beides sind doch integer, da ist ein typecasting nach int sinnvoller.
Zum allgemeinen Verständnis:- Du willst Datensätze aus der Tabelle "news" anzeigen.
- Die 300 letzten Datensätze sollen übersprungen werden.
- Pro Seite sollen 10 Datensätze angezeigt werden.
Code php:1 2 3
$aktuelle_seite = (int) $_GET['go']; $start = ($aktuelle_seite - 1) * $datensaetze_pro_seite + 300; $abfrage = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start,$datensaetze_pro_seite");
Wenn dieser Code nicht funktioniert, wäre es schön wenn du mal einen MySQL-Dump und den Source-Code anhängen könntest. So auf blauen dunst ist ein Debugging immer recht schwierig.
Gruß Kyoya StefanOracle Certified MySQL 5 Professional Developer
Zend Certified PHP 5.3 Engineer
Vorträge, Webinare, etc im Mayflower - Blog
-
08.12.11 20:00 #13
Hi,
außerdem solltest du eine Fehlerbehandlung einfügen.
Das einfachste Beispiel für ein Fehler-Szenario ist, dass jemand für den GET-Parameter 'go' -30 setzt.
Dieser wird auch richtig in einen Integer umgewandelt und ergibt dann nach der Gleichung für $start einen Wert von -10.
Und damit taucht der erste Fehler seitens MySQL auf. Dann werden noch mehr Fehler von den anderen Funktionen (mysql_fetch_object()) generiert.
Neben einer Fehlerbehandlung würde sich auch sowas eigenen:
PHP-Code:$aktuelle_seite = 1; // Standard-Seite
if ( isset($_GET['go']) )
{
$aktuelle_seite = intval($_GET['go']);
if ( $aktuelle_seite < 1 || $aktuelle_seite > 999 )
trigger_error('Fehlerbehandlung...', E_USER_ERROR);
}
mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
Ähnliche Themen
-
Form ergänzen-wie?
Von pepsi_gx im Forum VisualStudio & MFCAntworten: 0Letzter Beitrag: 19.02.10, 15:29 -
Cronjob per PHP ergänzen
Von Milliongame im Forum PHPAntworten: 18Letzter Beitrag: 22.07.09, 17:18 -
XML-Dateien ergänzen
Von $horty$2 im Forum JavaAntworten: 8Letzter Beitrag: 16.07.09, 14:59 -
Kalender mit PHP ergänzen
Von bambid im Forum PHPAntworten: 11Letzter Beitrag: 20.05.05, 10:45 -
Lästiges Ergänzen im MS IE
Von Ruediger im Forum Microsoft WindowsAntworten: 1Letzter Beitrag: 08.09.02, 16:49





Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren