MySQL Benutzerliste
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
alphabet
anfangsbuchstabe
anforderung
auslese
benutzer
buchstabe
code
differenz
erzeugen
frage
grad
gruppe
letter
melde
mitglied
nutzer
ordern
spalten
tabelle
vorname
-
Servus,
Ich habe in einer MySQL Tabelle Benutzer gespeichert, die ich auslesen möchte.
Allerdings sollen die Benutzer nach dem Anfangsbuchstaben geordnet sein und zwischen jedem neuen Anfangsbuchstaben eine Zwischenüberschrift mit diesem Buchstaben sein.
Hier mal zur Verbildlichung:
A
Aaron
Arnold
Augustus
B
Bastian
Benedikt
Benjamin
C
...
Wie ermögliche ich das mit PHP?
Grüßle Fabi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Einfach alles sortiert abfragen....
$abfrage = "SELECT * FROM tabelle ORDER BY name";
Beitrag zuletzt geändert: 11.5.2010 16:51:34 von buechsdeluxe -
Ich habe so etwas ähnliches mal programmiert. Anbei mal eine gekürzte Version. Das baut die Mitglieder in einer 4-Spalten Tabelle auf.
$query= mysql_query("SELECT id, nutzer, vorname, name, gruppe FROM mitglieder ORDER BY vorname ASC"); // Navigationstabelle erzeugen! // ---------------------------- $differenz = ord('a')-ord('A'); // Differenz zwischen Alphabeten $buchstabe_alt = chr(ord('A')-1); $spalten = 4; $aktspalte = 1; $navitab = "<table width='100%'><tr>"; while ($row = mysql_fetch_object($query)) { $buchstabe_neu = strtoupper((substr($row->vorname,0,1))); if(ord($buchstabe_neu)==0) $buchstabe_neu = $buchstabe_alt; // falls Leerzeichen, dann kein neuen Buchstaben erkennen if (ord($buchstabe_neu) != ord($buchstabe_alt)) //falls neuer Buchstabe gefunden wurde, neue Buchstabenausgabe in Indexleiste erzeugen { if($aktspalte != 1) $navitab .= "</table></td>"; if($aktspalte > $spalten) { $navitab .= "</tr><tr>"; $aktspalte = 1; } $navitab .= "<td valign='top'><table width='100%'><tr><td valign='top' colspan='2' class='index_Buchstabe'>"; for ($i = 1; $i < (ord($buchstabe_neu)-ord($buchstabe_alt)); $i++) { $navitab .= chr(ord($buchstabe_alt)+$i)." \n"; // Zwischenbuchstaben } if((ord($buchstabe_neu)-ord($buchstabe_alt))>1) { $navitab.= "</td></tr></table></td>"; if($aktspalte == $spalten) { $navitab .= "</tr><tr>"; $aktspalte = 0; } $navitab .= "<td valign='top'><table width='100%'><tr><td valign='top' colspan='2' >"; // Neue Spalten für Einträge $aktspalte++; } $navitab .= $buchstabe_neu." \n</td></tr>"; $navitab .= "<tr><td width='95%'><a href='".$_SERVER['SCRIPT_NAME']."?aktion=details&zeige=".$row->nutzer."'>".$row->vorname." ".$row->name."</a></td><td>[".substr($gruppe[$row->gruppe],0,1)."]</td></tr>"; $buchstabe_alt = $buchstabe_neu; $aktspalte++; } else { $navitab .= "<tr><td width='95%'><a href='"$_SERVER['SCRIPT_NAME']."?aktion=details&zeige=".$row->nutzer."'>".$row->vorname." ".$row->name."</a></td><td>[".substr($gruppe[$row->gruppe],0,1)."]</td></tr>"; } } // Alphabet mit Buchstaben auffüllen bis Z, falls nicht schon vorher erreicht. if(ord('Z')-ord($buchstabe_alt)) { if(mysql_num_rows($query) != 0) $navitab .= "</table></td>"; if($aktspalte > $spalten) $navitab .= "</tr><tr>"; $navitab .= "<td valign='top'><table width='100%'><tr><td class='index_Buchstabe_deaktiviert'>"; for ($i = 1; $i <= (ord('Z')-ord($buchstabe_alt)); $i++) { $navitab .= chr(ord($buchstabe_alt)+$i)." \n"; // Zwischenbuchstaben } $navitab .= "</td></tr></table>"; } $navitab .= "</tr></table>"; echo $navitab;
Ich hoffe, das funktioniert so, da halt gekürzt. Ansonsten melde Dich nochmal per PN. -
Falls du es erstmal ohne Tabelle haben willst und es relativ kurz sein soll hab ich mich grad mal drangesetzt und was geschrieben.
Es erfüllt vom Prinzip her deine Anforderungen und das Design kannst du ja selbst noch genau anpassen.
Allerdings überspringt es leere Buchstabengruppen.
<?php $userlist = mysql_query("SELECT username FROM user ORDER BY username"); $letter = ""; while($user = mysql_fetch_object($userlist)) { $firstletter = substr($user->username, 0, 1); if($firstletter != $letter) { $letter = $firstletter; echo ("<h2>$letter</h2>\n<br>\n"); } echo ("$user->username<br>\n"); } ?>
MfG
karlsve
Beitrag zuletzt geändert: 11.5.2010 17:24:10 von karlsve -
@karlsve:
Des ist prima! War grad am entwirren des anderen Scriptes.
Danke!
Fabi
Beitrag zuletzt geändert: 11.5.2010 17:33:16 von fabian-riedel -
Null Problem ;)
Der Thread kann dann ja jetzt geschlossen werden oder?
Falls du noch Fragen hast kannst du mir auch einfach eine PN schicken.
MfG
karlsve -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage