Daten sortieren und blättern

Alles, was PHP betrifft, kann hier besprochen werden.

Daten sortieren und blättern

Postby MisterX » 19. February 2006 09:21

Hallo,

habe folgendes vor:
- 15 Spalten mit ca. 2000 Datensätzen
- bei der ersten Ausgabe soll kein Order by verwendet werden, aber alle Spaltenüberschriften sollen order=ASC übergeben
- wenn jetzt eine Spalte angeklickt wurde, dann soll diese auf order=DESC gesetzt werden, damit man beim nächsten Klick auf die Spalte umgekehrt sortieren kann
- das ganze soll mit LIMIT per combobox/dropdown (25/50/100 Datensätze pro Seite) "begrenzt" werden
- zudem soll es nicht nur ein vor und zurückblättern geben, sondern wie z.B. bei Goggle Seite 1 2 3 4 5 (11 12 13 14 15) also immer 5 Seiten anklickbar

Jetzt meine Fragen dazu:
- Wie müssen die Variablen initialisiert werden?
- Wie gestallte ich die sql abfrage richtig (... ORDER BY '$spaltename' $order LIMIT $offset,$limit ???)
- wie mache ich das mit der Blätterfunktion (for schleife?)

Ich habe es mir zwar in PHPMyadmin angeschaut, da es sowas dort ja gibt, aber ich habe nicht ganz durchgeblickt.
MisterX
 
Posts: 49
Joined: 06. July 2004 18:16
Operating System: Win7 Ultimate x64 SP1 de/en

Postby KingCrunch » 20. February 2006 07:49

Bin ma dazu gekommen mein Hirn einzusetzen. Es ist eigentlich ein algorithmisches Problem, in diesem Sinne gibt es da viele (um nicht zusagen unendlich) Möglichkeiten dies zu realisieren. Deshalb hier jetzt nur so mein Grundüberlegungen, die nicht optimal sein muss.
Zunächst würd ich, wenn schon etwas sortiert sein soll, dies immer mit ORDER BY machen, versteh ich nicht ganz, wieso du das im ersten Teil gleich ablehnst...
- Wie müssen die Variablen initialisiert werden?

Das hängt stark davon ab, welche Variablen du überhaupt wie einsetzen willst. Brauchst auf jeden Fall nen kleinen Satz Zählvariablen. Einmal Anzahl der Einträge pro Seite ($limit), einmal Seitennummer ($page), Sortierung ($order). Ich würd sie ja scho, solange nichts anderes übergeben, gewissermaßen nach deinen Vorlieben initliasieren ;) zB
Code: Select all
$order = isset($_GET['order']) ? $_GET['order'] : 'ASC';
usw.
- Wie gestallte ich die sql abfrage richtig (... ORDER BY '$spaltename' $order LIMIT $offset,$limit ???)
Nen bisschen Anspruch sollte noch bleiben ;)
- wie mache ich das mit der Blätterfunktion (for schleife?)

hmm? Keine Ahnung, was du meinst. Ich dachte jetzt daran, dass du erstmal die Gesamtseitenzahl ermittels, einfach Anzahl Einträge geteilt durch Einträge pro Seit aufgerundet. Es bietet sich an die Gesamtzahl in einer Session Seite für Seite rüberzuschleifen, solange niemand die Einträge pro Seite ändert. Da spart man sich (eventuell aufwendige) Abfragen. "Nächste Seite" wäre dann einfach "aktuelle Seite + 1" und "vorige Seite" wäre dann "aktuelle Seite - 1", wenn schön werden soll, kann man die Anzeige auch begrenzen auf den Fall, dass man sich nicht bei der ersten/letzten Seite befindet.
Code: Select all
if ($page > 1) {
// Link "vorige Seite" anzeigen
}
if ($page < $maxPage) {
// Link "nächste Seite" anzeigen
}

Ahso, jetz versteh ich. Die Links für die einzelnen Seiten müssten dann per forSchleife erstellt werden. Ob man das ergebniss dann ebenfalls in der Session zwischenspeichert ist wohl auch Geschmackssache.

Zudem sollte man immer brav prüfen, ob die eingegebenen Daten immer brav den möglichen Werten entsprechen, weil man nie weiß inwiefern irgendwer an der URL rumfuscht ;)

So, das sollte zum Basteln erstmal reichen
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby MisterX » 01. May 2006 15:16

Bin grad an einer ähnlichen Sache dran.

Wie bekome ich das hin:
- 1. Klick z.B. auf die Spalte ID soll order=ASC seien
- 2. Klick auf die Spalte ID soll order=DESC seien

Habe versucht es mir bei phpMyAdmin anzuschauen, aber da steige ich nicht durch.
Ich habe auch schon bei google geschaut, aber keine "Anleitung" gefunden.

Bitte helft mir!

Code: Select all
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<title>Helix - Interessen - Gemeinschaft | Clicks</title>
</head>
<body>

<center>

<h3>Clicks</h3>

<table class="tabelle" cellpadding="5" cellspacing="0" border="1">


<?php

require 'inc/inc_db_login.php';

$order = isset($_GET['order']) ? $_GET['order'] : 'DESC';
$spalte = isset($_GET['spalte']) ? $_GET['spalte'] : 'clicks';

$abf_ausgabe = 'SELECT * FROM `counter` ORDER BY `'.$spalte.'` '.$order.'';
$res_ausgabe = mysql_query($abf_ausgabe);



echo '
<tr>
<th><a href="clicks.php?spalte=id_counter&'.$order.'">ID</a></th>
<th><a href="clicks.php?spalte=typ&'.$order.'">Quelle</th>
<th><a href="clicks.php?spalte=beschreibung&'.$order.'">Beschreibung</th>
<th><a href="clicks.php?spalte=link&'.$order.'">Link</th>
<th><a href="clicks.php?spalte=clicks&'.$order.'">clicks</th>
</tr>
';

while ($reihe = mysql_fetch_array($res_ausgabe))
   {
      
         echo '<tr>
                  <td>'.$reihe[id_counter].'</td>
                  <td>'.$reihe[typ].'</td>
                  <td>'.$reihe[beschreibung].'</td>
                  <td>'.$reihe[link].'</td>
                  <td>'.$reihe[clicks].'</td>
                  <tr>';
   }

?>
</table>

</center>
</body>
</html>
MisterX
 
Posts: 49
Joined: 06. July 2004 18:16
Operating System: Win7 Ultimate x64 SP1 de/en

Postby MisterX » 01. May 2006 15:35

Habe doch noch was gefunden, was mir weitergholfen hat.

Dasmit andere auch davon profitieren hier der Code mit dem es bei mir funktioniert:

Code: Select all
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<title>Helix - Interessen - Gemeinschaft | Clicks</title>
</head>
<body>

<center>

<h3>Clicks</h3>

<table class="tabelle" cellpadding="5" cellspacing="0" border="1">

<?php

require 'inc/inc_db_login.php';

$spalte = isset($_GET['spalte']) ? $_GET['spalte'] : 'clicks';

$strsort = $_GET[order];
if(empty($strsort)){
    $strsort ="DESC";
    $order = "ASC";
} else if ($strsort=="ASC") {
    $order="DESC";
} else if ($strsort=="DESC") {
    $order="ASC";
}

$abf_ausgabe = 'SELECT * FROM `counter` ORDER BY `'.$spalte.'` '.$strsort.'';
$res_ausgabe = mysql_query($abf_ausgabe);

echo '
<tr>
<th><a href="clicks.php?spalte=id_counter&order='.$order.'">ID</a></th>
<th><a href="clicks.php?spalte=typ&order='.$order.'">Quelle</a></th>
<th><a href="clicks.php?spalte=beschreibung&order='.$order.'">Beschreibung</a></th>
<th><a href="clicks.php?spalte=link&order='.$order.'">Link</a></th>
<th><a href="clicks.php?spalte=clicks&order='.$order.'">clicks</a></th>
</tr>
';

while ($reihe = mysql_fetch_array($res_ausgabe))
   {
      
         echo '<tr>
                  <td>'.$reihe[id_counter].'</td>
                  <td>'.$reihe[typ].'</td>
                  <td>'.$reihe[beschreibung].'</td>
                  <td>'.$reihe[link].'</td>
                  <td>'.$reihe[clicks].'</td>
                  </tr>';
   }

?>
</table>

</center>
</body>
</html>
MisterX
 
Posts: 49
Joined: 06. July 2004 18:16
Operating System: Win7 Ultimate x64 SP1 de/en


Return to PHP

Who is online

Users browsing this forum: No registered users and 63 guests