MySQL/PHP: Ausgabe von Namen mit alphabetischem Index
Maresa P
- datenbank
0 Cheatah
Hallo,
ich habe in meiner MySQL Datenbank eine Tabelle mit einer Spalte (vorname). In dieser Tabelle sind ca. 400 Datensätze mit lauter unterschiedlichen Vornamen gespeichert.
Ich möchte nun eine HTML Ausgabe aller Namen in Gruppen sortiert nach dem Anfangsbuchstaben. Zudem soll oben drüber ein Index stehen, über den ich direkt zur jeweiligen Gruppe springen kann. Der Index solla uch dynmisch generiert werden, und nur die Anfangsbuchstaben enthalten, die auch wirklich vorkommen.
Beispiel einer Ausgabe:
-----------------
A | B | C | E | G
-----------------
--------------
A
--------------
Achim
Andreas
Ansgar
Asterix
--------------
B
--------------
Beatrix
Benjamin
Bernhard
--------------
C
--------------
Cäsar
Claus
--------------
E
--------------
Edgar
Emil
Ernst
--------------
G
--------------
Gabriel
Gisela
Gustav
Gudrun
Wie realisiere ich soetwas am besten?
Mein Lösungsvorschlag:
Zuerst eine MySQL Abfrage, welchee alle ersten Buchstaben gruppiert und alphabetisch geordnet ausgibt, um den Index zu bilden... Danach je gefundenem Anfangsbuchstaben eine Abfrage aller Namen mit dem jeweiligem Anfangsbuchstaben...
erscheint mit etwas zu umständlich!
Wie realisiert man soetwas effizienteR?
Vielen Dank für Euere Hilfe
MAresa P.
Hi,
Zuerst eine MySQL Abfrage, welchee alle ersten Buchstaben gruppiert und alphabetisch geordnet ausgibt, um den Index zu bilden... Danach je gefundenem Anfangsbuchstaben eine Abfrage aller Namen mit dem jeweiligem Anfangsbuchstaben...
erscheint mit etwas zu umständlich!
mir auch. Ein einziges Statement reicht; Du kannst den Buchstabenwechsel schließlich in der umgebenden Programmlogik feststellen. Je nach Menge der Daten ist es zu überlegen, ob ein zweites Statement vorher zur Ermittlung der vorhandenen Buchstaben sinnvoll ist, oder ob Du alle Daten zunächst in den Speicher lädst bzw. die Liste zweimal komplett durchläufst.
Cheatah
Hi,
Je nach Menge der Daten ist es zu überlegen, ob ein zweites Statement vorher zur Ermittlung der vorhandenen Buchstaben sinnvoll ist, oder ob Du alle Daten zunächst in den Speicher lädst bzw. die Liste zweimal komplett durchläufst.
auch ein zweimaliges Durchlaufen der Liste halte ich für unnötig. Den Index kann man ja auch während des einen Durchlaufs bilden:
-------
<alle Datensätze selektieren>;
while (datensätzeVorhanden) {
if (buchstabenWechsel) {
$index .= <Link zum Anker>;
$liste .= <Überschrift für neuen Buchstaben und Ankerdefinition>;
}
$liste .= <nächster Datensatz>;
}
$listeKomplett = $index . $liste;
-------
Gruß,
Andreas.
P.S.: fieser Pseudo-Code, ich weiß ;-)
Hi,
auch ein zweimaliges Durchlaufen der Liste halte ich für unnötig. Den Index kann man ja auch während des einen Durchlaufs bilden:
wenn er _nach_ den Einträgen ausgegeben werden soll, ja. Andernfalls müsste - wie gesagt - die gesamte Datenmasse zunächst in den Speicher geladen werden.
Cheatah
hi,
wenn er _nach_ den Einträgen ausgegeben werden soll, ja.
in andreas' beispiel wird er aber _vor_ der liste ausgegeben(*) ;-)
Andernfalls müsste - wie gesagt - die gesamte Datenmasse zunächst in den Speicher geladen werden.
er _hat_ ja auch alle daten zunächst in variablen abgelegt, _ausgeben_ tut er sie ja erst später. zwei schleifen braucht es dafür aber trotzdem nicht.
gruss,
wahsaga
(*) "ausgeben" eigentlich in anführungszeichen, da er ja nur eine variable $listeKomplett mit dem nötigen code erzeugt, aber ein echo stattdessen wäre hier natürlich ebenso möglich. ausserdem isses ja nur pseudocode ...
Vielen Dank Euch allen. ich habs genau so umgesetzt...