Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MySQL-Ausgabe auf mehrere Seiten aufteilen

Empfohlene Antworten

Veröffentlicht

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!



SELECT *
FROM tab
LIMIT 0,10[/PHP]

oder

[PHP]
SELECT *
FROM tab
WHERE datum > last_action_date
LIMIT 0,10
DESC

puuuh, dir fehlen die Basics bei MySql, ohne die bist du mit dieser Aufgabe und PHP aufgeschmissen. Du solltest auf ein Tutorial zurückgreifen.

<?
$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...

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

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]

$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]

  • 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!

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.

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 ?

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

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

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

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

  • 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?

Klar, wenn du direkt auf die ID zugreifst bekommst du nix zurück.

Ansonsten: Nein

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.