Nur einen Datensatz laden

Klar sry
PHP:
$sel = $dbh->prepare("SELECT 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, c.rang FROM ".$dbpf."usr AS a, ".$dbpf."profil AS b, ".$dbpf."rang AS c WHERE a.beitraege <= c.anzahl GROUP BY a.name ORDER BY a.name DESC ");
$sel->execute();
while($row = $sel->fetch()){
	if($row['online'] == 0) $online = "<img src='".$pfad_gesamt."/content/images/icons/offline.png' />";
	else $online = "<img src='".$pfad_gesamt."/content/images/icons/online.png' />";
	$date = date("d.m.Y", $row['date']);

	if(isset($row['icq']) && !empty($row['icq'])) $msg = "ok"; // ist leer, obwohl $row['icq'] einen wert hat
	
	$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['rang']."</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>
	";
}
 
PHP:
if(isset($row['icq']) && !empty($row['icq'])) $msg = "ok";
// ist leer, obwohl $row['icq'] einen wert hat
Diese Abfrage halte ich für übertrieben, wir sind in einer while mit bestehendem Datensatz, von dem wir behaupten können, ['icq'] existiert auf jeden Fall. Letztlich geht es nur um die Überprüfung, ob was drinsteht.

(A) ein einfaches
PHP:
echo $row['icq']."</br>";
zur Debug-Kontrolle, dass Daten mitgegeben werden. Sprich, ist der Fehler im php-code oder gibt die SQL-Query keine 'icq'-Daten aus..

(B) die Abfrage vereinfachen, zB
PHP:
if(!empty($row['icq']))
{ $msg="ok";}

mfg chmee
 
Wie wäre es mit JOINS?
SQL:
"SELECT 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, c.rang
	FROM ".$dbpf."usr AS a LEFT JOIN ".$dbpf."profil AS b ON a.id = b.userid LEFT JOIN ".$dbpf."rang AS c ON a.id = c.userid WHERE a.beitraege <= c.anzahl GROUP BY a.name ORDER BY a.name DESC"
Hierbei müssten a.id,b.userid,c.userid an deine Spalten angepasst werden.
Dies funktioniert natürlich nur wenn die Tabellen untereinander Beziehungen haben, also die userid in den Spalten b&c gleich id von der Tabelle a.
 
@chmee
Es werden keine Daten mitgegeben. Habe es auch erst ohne isset gehabt, aber da nix raus kam, habe ich das einfach mal versucht^^ Habe sogar mit print_r die Var row ausgegeben, aber auch da leer.
@maniac
Danke, ich werde es direkt mal ausprobieren.
 
Also ich habe das jetzt mal angewandt und es funktioniert fast perfekt. Jetzt ist allerdings das Prob, das der rang nicht mehr nach Beiträge sondern nach id ausgewählt wird. Das wird wohl daran liegen, dass im LEFT JOIN bei on a.id = c.id ist. Ich kenne mich mit LEFT JOIN leider gar nicht aus und weiß somit nicht wie das arbeitet.
 
Hallo,

Setz mal an das Ende : ORDER BY rang

Left join verbindet 2 Tabellen anhand der Verknüpfung, es wird auch ein Ergebnis zurückgegeben, wenn in der 2ten Tabelle kein Eintrag dazu passt.
 
Ich habe jetzt einfach nach dem ON das a.id = c.id in a.beitraege <= c.anzahl aus der WHERE-Bedingung geändert und diese dann auch raus genommen. jetzt futzt es wunderbar. Vielen danke für die hilfe.
 
Ich habe jetzt noch einmal zu diesem Statement eine Frage, und zwar würde ich jetzt gern die Sorierung vom User vornehmen lassen. Dazu habe ich aus $_GET einmal DESC oder ASC bestimmen lassen, aber auch a.name, a.beitraege und a.date. Das erste Prob ist, das ich zb bei a.name nicht a.? steht haben kann und dann per bindParam ersetze. Es geht nur so a.$order.
Vllt könnt ihr mir ja nochmal einen Tipp geben.
lg
 
Zuletzt bearbeitet:
Zurück