Nur einen Datensatz laden

taurin

Erfahrenes Mitglied
Hi, ich habe auch mal wieder eine Frage. Es geht darum, das ich aus der DB Daten holen will, aber keinen Doppelt. ich weiß, dazu gibt es DISTINCT, das funktioniert aber nicht.
PHP:
$sel = $dbh->prepare("SELECT DISTINCT a.id, a.name, b.date, c.rang FROM ".$dbpf."usr AS a, ".$dbpf."daten AS b, ".$dbpf."rang AS c WHERE a.titel <= c.anzahl");
Diese Abfrage liefert mir wenn ich c.rang weg lassen nur einen, wenn ich aber c.rang drin habe immer alle, da ja a.title <= c.anzahl bei jeden zutrifft. Wie kann ich das jetzt lösen?
Und da es gerade zu dieser Abfrage gehört noch eine Frage. Kann man auch zb a.id und a.name als array ausgeben lassen, zb. so: a.id AS name, a.name AS name?
Danke schonmal für die Antworten.
lg
 
Zuletzt bearbeitet:
DISTINCT filtert scheinbar nur bei "logisch =" sinnvolle Ausgaben. Siehe Beispiel auf MySQL, wo store_name DISTINCT erfasst wird.. Wie sieht es mit einem Subselect aus, erstmal mit "WHERE" filtern und diese SELECT noch mit DISTINCT bearbeiten. -Subselect-Beispiel-

mfg chmee
 
Wie sind die Tabellen denn aufgebaut? hier wäre die Struktur wichtig, wie die Tabellen miteiner in Verbindung stehen. Ein Join könnte hier abhilfe schaffen.
 
Du könntest das auch nur schnell beschreiben :D
Ich mein ob Verbindungen zwischen den Tabellen bestehen alla a.id = b.userid

Ansonsten hast du in phpMyAdmin die Tabellen in der Druckansicht anzuzeigen.
 
PHP:
$resultD=mysql_query("DESCRIBE <TABELLE>")or die(mysql_error());
wirft Dir alle Infos zu einer Tabelle aus

mfg chmee
 
hi, sorry das ich erst jetzt wieder schreibe, aber ich war auf Arbeit.
Die ganze abfrage lautet:
PHP:
$sel = $dbh->prepare("SELECT DISTINCT a.name, a.date, a.online, a.beitraege, a.id, b.aim, b.msn, b.yahoo, b.icq, b.skype, b.facebook, b.myspace, b.twitter FROM ".$dbpf."usr AS a, ".$dbpf."profil AS b, ".$dbpf."rang AS c WHERE a.beitraege <= c.anzahl");
$sel->execute();
while($row = $sel->fetch()){
	if($row['online'] == 0) $online = "<img src='".$pfad_gesamt."/.../offline.png' />";
	else $online = "<img src='".$pfad_gesamt."/.../online.png' />";
	
	$date = date("d.m.Y", $row['date']);
	
	$user_datensatz .= "
						<tr>
							<td valign='middle' align='center' style='padding:5px;'><span class='username'><a href='index.php?s=25&userID=103".$row['id']."'>".$row['name']."</a></span><br />".$row['name']."</td>
							<td valign='middle' align='center'>".$msg."</td>
							<td valign='middle' align='center'>".$date."</td>
							<td valign='middle' align='center'>".$row['beitraege']."</td>
							<td valign='middle' align='center'>".$online."</td>
						</tr>
	";
}
Was ich jetzt gerne hätte ist, das nur der richtige Rang angezeigt wird und nicht alle. Und das alle ausgewählten MSG in ein Array kommen und dann auch ausgegeben werden.
Vllt könnt ihr mir ja weiter helfen.
PS: Bitte nicht meckern weil die DBs schlecht sind, hab aber ka wie ichs besser machen könnte^^
lg
 
Zuletzt bearbeitet:
(A) Also, Du hast nen user, wessen Beiträgeanzahl (in usr) entscheidet, welchen Rang er hat und (B) in der rang-Tabelle steht die Zuordnung Rang zu Mindestanzahl Beiträge, richtig?

Vergiss DISTINCT, das ist das Falsche, sondern versuche alle rang-Einträge
WHERE usr.beitraege>rang.beitraege
mit MIN() und GROUP BY zu beschränken.

..und noch einfacher wäre es, wenn Du eine Subselect mit
ORDER BY rang.beitraege ASC LIMIT 1
beschränkst.

mfg chmee
 
Zuletzt bearbeitet:
Vielen dank für deine hilfe. Da hätte man nun wirklich auch selbst drauf kommen können^^
Es läuft jetzt wie ich es mir vorgestellt habe, zumindest was den rang betrifft. Wie kann ich jetzt alle msg auslesen und in eine var speichern?
lg
 
Warum sind den die Einträge aus den Abfragen b.icq usw. leer, auch wenn in der DB Daten vorhanden sind?
 
Zurück