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!
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
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
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.
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...
HopelessFrag Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 kannst du mir ein gutes Tutorial empfehlen?
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
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
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!
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]
HopelessFrag Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 Achso vielen Dank! Und $connection ist was?
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]
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!
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.
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 ?
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
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
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
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
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
HopelessFrag Geschrieben 4. April 2006 Autor Geschrieben 4. April 2006 Ja, darauf bin ich auch selber gekommen Trotzdem vielen dank :uli
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?
Whatever Geschrieben 7. April 2006 Geschrieben 7. April 2006 Klar, wenn du direkt auf die ID zugreifst bekommst du nix zurück. Ansonsten: Nein
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?
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden