Veröffentlicht 28. März 200619 j 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!
28. März 200619 j SELECT * FROM tab LIMIT 0,10[/PHP] oder [PHP] SELECT * FROM tab WHERE datum > last_action_date LIMIT 0,10 DESC
28. März 200619 j Autor hmm sorry, kann ich nicht soviel mit anfangen, kenne mich noch nicht so richtig mit MySQL aus
28. März 200619 j puuuh, dir fehlen die Basics bei MySql, ohne die bist du mit dieser Aufgabe und PHP aufgeschmissen. Du solltest auf ein Tutorial zurückgreifen.
28. März 200619 j <? $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...
28. März 200619 j 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
28. März 200619 j 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
28. März 200619 j Autor @Pimpermann: Was muss ich bei `Spalte`="text" einsetzen? Schonmal vielen Dank für eure schnelle Hilfe!
28. März 200619 j 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]
28. März 200619 j $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]
4. April 200619 j Autor 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!
4. April 200619 j 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.
4. April 200619 j 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 ?
4. April 200619 j 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
4. April 200619 j Autor 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
4. April 200619 j 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
4. April 200619 j 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
4. April 200619 j 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
7. April 200619 j Autor 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?
7. April 200619 j Autor 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?
7. April 200619 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.