Tabelle Sortieren mit PHP

masterofeye

Mitglied
Hallo an alle

Habe gerade durch die Suchfunktion gestöbert aber nichts richtiges gefunden.

Mein Problem ist folgendes:

Ich hab in einer MYSQL Datenbank 6 Spalten(id; album; interpret;genre; hyperlink; genre2)
diese lasse ich nun ausgeben in einer HTML Tabelle und nun möchte ich das Sortieren lassen also die Spalten Album, Interpret und Genre wie mache ich das? Bitte nicht nur Funktionsname schreiben sondern kleine Anleitung. Vielen Dank
 
Du kannst in deiner MySQL-Abfrage schon fest legen nach was es sotiert werden soll.
"SELECT * FROM tabelle ORDER BY spalte1 DESC / ASC"
 
Da ich davon ausgehe, dass du es ganz normal in PHP ausliest, solltest du es mit ORDER BY in SQL bereits sortieren, siehe dazu auch:
http://dev.mysql.com/doc/refman/5.1/de/functions.html

Die andere Möglichkeit wäre, die Daten in ein Array zu speichern und es dann mit PHP zu sortieren, siehe dazu auch hier:
[phpf]array[/phpf]

Unten in der Funktionsübersicht sind Sortierfunktionen aufgelistet.
 
Hi,

eine Frage : Möchtest du es vorsortiert haben oder soll dem User die Möglichkeit gegeben werden diese Spalten selbst auf- und absteigend zu ordnen?
 
Die andere Möglichkeit wäre, die Daten in ein Array zu speichern und es dann mit PHP zu sortieren, siehe dazu auch hier:
[phpf]array[/phpf]

Unten in der Funktionsübersicht sind Sortierfunktionen aufgelistet.

Ist ein Array in dem Fall nicht falsch am Platz? Was die Datenbank kann soll sie auch machen. Sonst geht Zeit und Speicher verloren...
 
Ist ein Array in dem Fall nicht falsch am Platz? Was die Datenbank kann soll sie auch machen. Sonst geht Zeit und Speicher verloren...

Das kommt immer darauf an. Manche Dinge kann die Datenbank auch nicht sortieren oder man will verschiedene Daten zusammenbringen (aus einer Datei und Datenbank) und trotzdem in der gleichen Ausgabe haben und sortieren, da kann soetwas schon einmal nützlich sein.
 
Gut ;)

du machst dann eben eine Tabelle aus deinem DB-Array und machst aus den Tabellenheaders eben links die sich dynamisch ändern können.

Sprich standardmäßig sind die zb.
Code:
<a href="table_sort.php?sortierung=genre&direction=desc">HEADER</a>

du könntest dann zb. einen Switch in den Link einbauen das wenn er gedrückt wurde sich umschaltet. das Ganze solltest als Funktion schreiben, damit es nicht immer doppelt machen musst.

PHP:
function sort_table_header($header, $mode="desc"){
   if($mode == "desc") {
      $mode_return = "asc";
   } else {
      $mode_return = "desc";
   }
      return "<a href=\"table_sort.php?sortierung=".$header."&direction=".$mode_return."\">HEADER</a>";    
}

so denn die Funktion rufst dann nach dem motto

PHP:
sort_table_header($_GET['header']/*(bzw selbst vorgegeben)*/ , $_GET['direction']);

und so kannst du die Werte dann switchen und die Werte $_GET['direction'] und $_GET['header'] aus der URL verwendest dann eben bei der Mysqlabfrage und machst es davon abhänig und änderst evtl noch nen angezeigtes Symbol aber ich denke darauf muss ich net eingehen und du solltest meine Switchfunktion soweit erweitern können.

Code:
  "SELECT * FROM tabelle ORDER BY ".$_GET['header']." ".$_GET['direction']

Bin mal davon ausgegangen, dass du als Mysqlspaltenname die gleichen wie auf der Webseite genommen hast, wenn nicht musst es mit ner Switchfunktion abändern ;)

Greez xErY
 
Danke für die Antwort nur weis funkts es noch nicht richtig
PHP:
<body>

<table cellpadding="0" cellspacing="0" border="2">
<th> <a href="musikliste.php?sortierung=genre&direction=desc">Album</a> </th>
<th> <a href="musikliste.php?sortierung=genre&direction=desc">Interpret</a> </th>
<th> <a href="musikliste.php?sortierung=genre&direction=desc">Genre</a> </th>
<?php
function sort_table_header($album, $mode="desc"){
   if($mode == "desc") {
      $mode_return = "asc";
   } else {
      $mode_return = "desc";
   }
      return "<a href=\"table_sort.php?sortierung=".$album."&direction=".$mode_return."\">album</a>";    
} 
sort_table_header($_GET['album']/*(bzw selbst vorgegeben)*/ , $_GET['direction']);  
?> 
<?php
@$sql = "SELECT * FROM albumliste" ;
@$result = mysql_query($sql) OR die(" datenbank".mysql_error());

 while($row = mysql_fetch_object($result)) {
 echo"<tr><td> $row->interpret </td><td> $row->album</td><td> $row->genre </td></tr>";
 }
 
?>
</table>
</body>
</html>

Was is daran falsch?
 
Wäre mal nett wenn du sagst was nicht geht..

--edit--

Ich sehs grad...

PHP:
<?

function sort_table_header($album, $mode="desc"){ 
   if($mode == "desc") { 
      $mode_return = "asc"; 
   } elseif (!isset($mode) || $mode = "") { 
      $mode_return = "desc"; 
   }  else {
      $mode_return = "desc";
   }
      return "<a href=\"table_sort.php?sortierung=".$album."&direction=".$mode_return."\">".ucfirst($album)."</a>";     
}  


<body> 

<table cellpadding="0" cellspacing="0" border="2"> 
<th> <?= sort_table_header("album", $_GET['direction']); ?> </th> 
<th> <?= sort_table_header("interpret", $_GET['direction']); ?> </th> 
<th> <?= sort_table_header("genre", $_GET['direction']); ?> </th> 
<?php 
if(isset($_GET['direction']) && isset($_GET['sortierung'])){
   @$sql = "SELECT * FROM albumliste ORDER BY '".$_GET['sortierung']."' '".$_GET['direction']"'" ;
} else {
  @$sql = "SELECT * FROM albumliste" ; 
}
@$result = mysql_query($sql) OR die(" datenbank".mysql_error()); 

 while($row = mysql_fetch_object($result)) { 
 echo"<tr><td> $row->interpret </td><td> $row->album</td><td> $row->genre </td></tr>"; 
 } 
  
?> 
</table> 
</body> 
</html>
du solltest versuchen, dass zu verstehen was ich da schreibe und nicht davon ausgehen das ich dir ein fertiges Skript gebe. Das skript was jetzt oben steht, sollte funktionieren, beim nächsten mal bitte nicht blind kopieren.
 
Zuletzt bearbeitet:
Zurück