Alphabet auflisten und entsprechend von DB-Einträgen verlinken

truckdriver

Mitglied
Hallo zusammen,

ich lese Datensätze aus einer SQL-Datenbank aus und lasse diese nach dem jeweiligen Anfangsbuchstaben des Alphabets sortieren. Auf der Ausgabeseite sind oben alle Buchstaben von A bis Z aufgelistet und der User kann durch einen Klick auf einen Buchstaben selber entscheiden, zu welchem Buchstaben er alle Einträge angezeigt bekommen möchte.

In bestimmten Fällen gibt es nur zu 3 oder 4 Buchstaben auch Einträge in der Datenbank. Mein Problem besteht nun darin, nur die Buchstaben entsprechend zu verlinken, zu denen es auch Einträge in der Datenbank gibt. Es sollen aber weiterhin alle von A bis Z angezeigt werden (auch, wenn kein DB-Eintrag dazu vorhanden ist - soll dann halt nur nicht verlinkt werden).

Wer kann mir bei der Lösung des Problems helfen?

Mein aktueller Quellcode sieht so aus:

Abfrage:

PHP:
$selection = isset($_GET["buchstabe"]) ? $_GET["buchstabe"] : "A";
$result = mysql_query("SELECT name FROM table
WHERE name LIKE '$selection%' ORDER BY name");

Anzeige und Verlinkung der Buchstaben:

PHP:
for ($i=65;$i<=90;$i++) {
$buchstabe=chr($i);
echo "<a href=seite.php?buchstabe=$buchstabe>$buchstabe</a> ";
}
 
Mach einfach eine Datenbankabfrage, die die Anfangsbuchstaben der vorhandenen Datensätze ausliest, beispielsweise:
Code:
SELECT LEFT(`name`, 1) AS `anfangsbuchstabe`
FROM `table`
GROUP BY `anfangsbuchstabe`
ORDER BY `anfangsbuchstabe`
Nun prüfst du beim Durchlauf aller Buchstaben einfach, ob dieser in der Menge der Anfangsbuchstaben der Datenbank vorhanden ist.
 
Danke für die Info. So ganz verstanden habe ich es aber noch nicht.

Ich habe meine Abfrage durch die SELECT LEFT Abfrage ersetzt. Dann habe ich mit dem folgenden Code versucht, das Vorhandensein der Anfangsbuchstaben zu prüfen. Leider funktioniert es aber so noch nicht.

PHP:
for ($i=65;$i<=90;$i++){
$buchstabe=chr($i);
if(in_array($buchstabe, $result)) {
echo "<a href='seite.php?buchstabe=$buchstabe'>$buchstabe</a>";
} else {
echo "$buchstabe ";
}}

Würde mich daher sehr über weitere Hilfe freuen.
 
Kannst du den entsprechend aktualisierten Code noch mal einstellen? mich deucht, das Problem ist einfacher zu lösen als gedacht, indem du auch den Sortierwert (also in dem Falle den Anfangsbuchstaben) in deiner Schleife mit ausgeben lässt...
 
PHP:
$query = '
	SELECT LEFT(`name`, 1) AS `anfangsbuchstabe`
	FROM `table`
	GROUP BY `anfangsbuchstabe`
	ORDER BY `anfangsbuchstabe`';
$result = mysql_query($query);
$rows = array();
while( $row =mysql_fetch_assoc($result) ) {
	$rows[] = $row['anfangsbuchstabe'];
}
for( $i=65; $i<=90; $i++ ) {
	$buchstabe = chr($i);
	if( in_array($buchstabe, $rows) ) {
		echo "<a href='seite.php?buchstabe=$buchstabe'>$buchstabe</a>";
	} else {
		echo "$buchstabe ";
	}
}
 
@ Gumbo

Vielen Dank für die prompte Hilfe! Ich hatte Deinen ersten Tipp erst falsch verstanden bzw. falsch in den vorhandenen Code eingebaut. Jetzt läuft aber alles wunderbar (auch dank Deinem letzten Post :)).

Danke!
 
Zurück