HopelessFrag Geschrieben 28. März 2006 Geschrieben 28. März 2006 Hallo zusammen! Ihr kennt doch sicherlich alle diese Blättern-Funktion auf vielen Seiten, also z.b. << 1 | 2 | 3 | 4 >> Wie macht man so etwas das immer 10 Einträge pro Seite ausgegeben werden? Es geht sich darum das ich ein News-Archiv am basteln bin. Sobald eine Neuigkeit einen Kommentar bekommt oder bearbeitet wurde bekommt sie in die Spalte "last_action" den aktuellen Zeitstempel eingetragen. Bei der Ausgabe werden die News dann nach last_action sortiert, so das die zuletzt bearbeiteten News oben stehen. Habe überhaupt keine Idee für einen Ansatz, habe so etwas noch nie gemacht. Danke für eure Hilfe! Zitieren
baba007 Geschrieben 28. März 2006 Geschrieben 28. März 2006 SELECT * FROM tab LIMIT 0,10[/PHP] oder [PHP] SELECT * FROM tab WHERE datum > last_action_date LIMIT 0,10 DESC Zitieren
HopelessFrag Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 hmm sorry, kann ich nicht soviel mit anfangen, kenne mich noch nicht so richtig mit MySQL aus Zitieren
baba007 Geschrieben 28. März 2006 Geschrieben 28. März 2006 puuuh, dir fehlen die Basics bei MySql, ohne die bist du mit dieser Aufgabe und PHP aufgeschmissen. Du solltest auf ein Tutorial zurückgreifen. Zitieren
Pimpermann Geschrieben 28. März 2006 Geschrieben 28. März 2006 <? $ErgebnisseProSeite = 1; echo '<form action=""Diese_Seite.php?AktuelleSeite=",$AktuelleSeite" method="POST">'; // Bein Kopf drücken wieder Aktuelle seite aufrufen if(!isset($_REQUEST['AktuelleSeite'])) { $AktuelleSeite = 0; } else { $AktuelleSeite = $_REQUEST['AktuelleSeite']; } $ResultPointer = mysql_query("SELECT * FROM Tab where `Spalte`="text" LIMIT $AktuelleSeite, $ErgebnisseProSeite", $connection); $Anzahl = mysql_num_rows(mysql_query("SELECT * FROM Tab where `Spalte`="text" ", $connection)); while($row = mysql_fetch_object($ResultPointer)) { echo $row->Spalte; } if($Anzahl > $ErgebnisseProSeite) // Seiten Anzahl { $Seiten = intval($Anzahl/$ErgebnisseProSeite); if($Anzahl%$ErgebnisseProSeite) { $Seiten++; } } for($i = 1; $i <= $Seiten; $i++) // Seiten link Ausgabe { if ($i-1 == $AktuelleSeite) echo"<a href=\"",$_SERVER['PHP_SELF'],"?AktuelleSeite=",($i-1)*$ErgebnisseProSeite,"\"><b>$i</b></a> "; else echo"<a href=\"",$_SERVER['PHP_SELF'],"?AktuelleSeite=",($i-1)*$ErgebnisseProSeite,"\">$i</a> "; } ?>[/PHP] Könnten noch ein paar kleine Fehler drin sein... Zitieren
HopelessFrag Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 kannst du mir ein gutes Tutorial empfehlen? Zitieren
geloescht_JesterDay Geschrieben 28. März 2006 Geschrieben 28. März 2006 hmm sorry, kann ich nicht soviel mit anfangen, kenne mich noch nicht so richtig mit MySQL aus http://dev.mysql.com/doc/refman/4.1/en/select.html Zitieren
baba007 Geschrieben 28. März 2006 Geschrieben 28. März 2006 kannst du mir ein gutes Tutorial empfehlen? MySql Tutorial dazu brauchst du unbedingt PHP Tutorial und fang nicht an Codeschnippsel von oben copy zu pasten, das bringt nur kurzfristig was, auf die dauer nichts Zitieren
HopelessFrag Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 @Pimpermann: Was muss ich bei `Spalte`="text" einsetzen? Schonmal vielen Dank für eure schnelle Hilfe! Zitieren
Pimpermann Geschrieben 28. März 2006 Geschrieben 28. März 2006 Das "text" steht für ein Kriterium... Wenn du einfach alles ausgeben willst was in der Tabelle steht dann mach folgendes: $ResultPointer = mysql_query("SELECT * FROM Tab LIMIT $AktuelleSeite, $ErgebnisseProSeite", $connection); $Anzahl = mysql_num_rows(mysql_query("SELECT * FROM Tab ", $connection)); [/PHP] Zitieren
HopelessFrag Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 Achso vielen Dank! Und $connection ist was? Zitieren
Pimpermann Geschrieben 28. März 2006 Geschrieben 28. März 2006 $mysqlhost="mysql"; // MySQL-Host angeben $mysqluser="User"; // MySQL-User angeben $mysqlpwd="Passwort"; // Passwort angeben $mysqldb="Datenbank"; // Gewuenschte Datenbank angeben $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen"); mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen."); mysql_query($sql); [/PHP] Zitieren
HopelessFrag Geschrieben 4. April 2006 Autor Geschrieben 4. April 2006 Sooo, habe mich nun in letzter Zeit etwas mit MySQL Tutorials auseinander gesetzt, und habe mittlerweile ein eigenes Script für die Ausgabe geschrieben. Es funktioniert auch fast, außer einer Sache. Im Verlauf des Scripts werden zwei Variablen berechnet, $start (start-id) und $limit (end-id). Nun möchte ich halt mit einer MySQL-Query nur einen bestimmten Bereich abfragen, das macht man soweit ichs verstanden hab ja mit LIMIT x,X. Meine Abfrage sieht nun so aus: SELECT * FROM tbl_main WHERE id LIMIT '$start','$limit' ORDER BY id DESC; Es sollen damit alle Zeilen zwischen $start und $limit ausgegeben werden. Aber es funktioniert leider nich. Könnt ihr mir da vllt weiterhelfen? Danke! Zitieren
Aiun Geschrieben 4. April 2006 Geschrieben 4. April 2006 lies die tutorials nochmal ^^ Limit steht für die anzahl der Datensätze, nicht für die Primärschlüssel also Limit 10,20 liefert vom 10 bis 20. Datensatz entsprechend deiner Filter und sortierung. Limit wird nicht in '' angegeben. '' stehen für Strings. Limit sind aber Zahlen. Zitieren
baba007 Geschrieben 4. April 2006 Geschrieben 4. April 2006 erstmal fetten Respekt, das ging ja fix ... www.mysql.de sagt : Wenn Sie LIMIT # mit ORDER BY benutzen, beendet MySQL das Sortieren, sobald er die ersten # Zeilen gefunden hat, anstatt die gesamte Tabelle zu sortieren. damit wird dein guter Gedankengang, zur nichte gemacht aber für jedes Problem gibts eine Lösung ungetestet : select * from (SELECT * FROM tbl_main ORDER BY id DESC) WHERE id LIMIT $start,$limit ; welche Mysql version hast du ? @an alle: gehen diese Subselects überhaupt bei mysql ? Zitieren
tallman Geschrieben 4. April 2006 Geschrieben 4. April 2006 also Limit 10,20 liefert vom 10 bis 20. Datensatz entsprechend deiner Filter und sortierung. na?? heisst es nicht: LIMIT X, Y X ist der erste Wert Y die auszugebenden Werte d.h.: LIMIT 10, 20 fängt beim 10. Eintrag an und gibt dann die 20 darauf folgenden aus, wenn vorhanden.... mfg Zitieren
HopelessFrag Geschrieben 4. April 2006 Autor Geschrieben 4. April 2006 Okay, das mit dem LIMIT läuft soweit ganz gut. Aber wie schaffe ich es nun die Ausgabe nach 'id' zu sortieren? Mit den verschalteten SELECT funktioniert es jedenfalls nicht Zitieren
tallman Geschrieben 4. April 2006 Geschrieben 4. April 2006 hm SELECT * FROM tab ORDER BY id DESC LIMIT 0, 10 ORDER BY id sortiert alles nach id und DESC steht dafür das es rückwärs ausgegeben werden soll noch fragen?? :bimei Zitieren
baba007 Geschrieben 4. April 2006 Geschrieben 4. April 2006 noch fragen?? :bimei ja ! in welchem Zusammenhang steht dein Code da ? Die Problematik triffts ja nicht Er will nicht die ersten 10 sondern zum Beispiel 90 bis 100 und da fuppt Limit nicht mit Order Zitieren
tallman Geschrieben 4. April 2006 Geschrieben 4. April 2006 naja, ich gehe jetzt mal davon aus, dass man selber auf die Idee kommt, statt den Zahlen halt Werte einzutragen nur nochmal für dich (ich weiss das du es auch kannst) mit Variblen SELECT * FROM tab ORDER BY id DESC LIMIT $start, $limit Was soll daran nicht funktionieren?? Ich verwende es fast ÜBERALL!! mfg Zitieren
HopelessFrag Geschrieben 4. April 2006 Autor Geschrieben 4. April 2006 Ja, darauf bin ich auch selber gekommen Trotzdem vielen dank :uli Zitieren
HopelessFrag Geschrieben 7. April 2006 Autor Geschrieben 7. April 2006 Habe noch eine kleine Frage: wenn ich z.B. den Datensatz mit der ID (primärschlüssel) Xx lösche dann ist in der Tabelle ja an dieser Stelle eine Lücke. Kann das evtl. Auswirkungen auf zukünftige Datenbank-Abfragen haben? Zitieren
Whatever Geschrieben 7. April 2006 Geschrieben 7. April 2006 Klar, wenn du direkt auf die ID zugreifst bekommst du nix zurück. Ansonsten: Nein Zitieren
HopelessFrag Geschrieben 7. April 2006 Autor Geschrieben 7. April 2006 Gibt es denn eine einfache Möglichkeit die Tabelle so zu formatieren das keine Lücken zu finden sind? Z.B. das die Nachfolgenden Datensätze automatisch nach oben nachrücken? Zitieren
baba007 Geschrieben 7. April 2006 Geschrieben 7. April 2006 das macht keinen Sinn. Grunsätzlich gilt, gelöschte PKs, die auch mal FKs waren nicht wieder zu belegen. Bei allen anderen ist das Nachrücken nicht nötig Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.