SQL-Daten Optionsfeldoptimierung

Katjusha

Mitglied
Ich schreibe gerade eine kleine Auswertung einer großen Tabelle, wo mehrere Datensätze übereinstimmen können. Diese sollen dann nicht doppelt ausgegeben werden, sondern nur einmal. Ich erzeuge dann ein Optionsfeld wo ich gezielt nach diesen Daten suchen kann.

Zum besseren Verständnis hier ein Beispiel:

Datensatz:
========
Name: Micha
Waffe: Sig
Clan: BBV

Genau diese Daten werden hier in der SQL-Tabelle gespeichert und ich möchte nun gezielt nach allen Datensätzen suchen welche zur BBV gehören.

Code:
$result = mysql_query("SELECT * FROM $tabelle WHERE 1 AND `Clan` != '' ORDER BY `Clan` DESC");  	
while ($ausgabe = mysql_fetch_array ($result))  		
{  			
if ($ref<>$ausgabe[Clan]) 
{
echo "<option value=".$ausgabe[Clan].">".$ausgabe[Clan]."</option>";
}  			
$ref=$ausgabe[Allianz];  		
}

Damit die Clans in dem Optionsfeld nicht doppelt angezeigt werden habe ich die Variable $ref eingeführt in, welcher der letzte durch ein Optionssatz dargestellte Clanname gegeben wird. Ohne diese Variable bekäme ich im Optionsfeld jeden Clan so oft angezeigt wie er Mitglieder besitzt was den Sinn des Optionsfeldes in Frage stellen würde.

Es ist keine schöne Lösung finde ich, aber erfüllt den Zweck recht sauber.

Gibt es eventuell eine elegantere Lösung für das Problem?
 
Die eleganteste Lösung wäre, eine eigene Clan-Tabelle mit ID und Clan_Name anzulegen. In der Personentabelle wäre dann nur die ID des Clans. Ein einfacher Select über die Clan-Tabelle ermittelt dann die zur Verfügung stehenden Clans.
In Deinem Fall könnte folgendes Query funktionieren:
Code:
SELECT DISTINCT `Clan` 
FROM $tabelle 
WHERE `Clan` != '' 
ORDER BY `Clan` DESC

Gruß hpvw

PS: Du greifst auf die Arrayelemente des Ergebniszeilenarrays mit Konstanten zu. Die Indizes sind jedoch durch strings gekennzeichnet. Auf rigoros eingestellten Servern kann Deine Variante zu einer Notice (Undefined Constant) führen. Richtig wäre z.B. $ausgabe['Clan'].
 
Danke. hab ebenfalls auch mal deinen Rat befolgt und die Sachen abgeändert. Nun ist mir ein neues Problem aufgefallen was ich bisher noch nie gehabt habe. Wenn der Dateninhalt des Clannames ein Space enthält findet die Abfrage keine Ergebnisse. Lediglich wenn der Clanname ein komplettes Wort ist führt die Abfrage zum gewünschten Ergebnis.

Woran kann das denn liegen?
 
Erklären kann ich Dir das nicht.
Wenn kein Clanname existiert würde ich explizit NULL eintragen mit ... WHERE `Clan` IS NOT NULL sollte das Problem dann behoben sein.
 
Sorry, da hatte ich mich etwas ungenau ausgedrückt! :)

Clanname "Ulanbator" wird gefunden wie ich es will
Clanname "Ulan_bator" ebenfalls
Clanname "Ulan bator" wird nicht beürcksichtigt.

gibts da eine Erklärung für?
 
Zurück