Query läuft ins Endlose

Mit JOIN ist es natürlich die eleganteste Lösung, klar!
Aber mal ganz ehrlich, wenn Du den Fehler in der einfachen while-Schleife nicht erkennst, befürchte ich, daß Du auf ganz andere Probleme treffen wirst.
Klar sollte man "vernünftige" SQL-Abfragen verwenden, aber hier geht es glaube ich um grundlegende Probleme bei der Schleifenprogrammierung in PHP...
 
PHP:
$res = db_query("SELECT p.id, p.skill, n.name FROM player p LEFT JOIN player_names n ON (n.id = p.id)");

$players = array();

while ($row = db_fetch_array($res)) {
  $player[] = $row;
}
Die Werte einzeln in Arrays wie [tt]$ids[/tt], [tt]$skill[/tt], etc. zu speichern halte ich fuer nicht sinnvoll. Wenn sie schon nicht in einem abstrakten Objekt abgelegt werden, dann wenigstens an einem zentralen Array (wie z.B. [tt]$player[/tt/ in meinem Beispiel).

Ps: "LEFT JOIN" bedeutet, dass auch Datensaetze abgerufen werden, fuer die kein Name existiert. Ist dieses Verhalten unerwuenscht, benutzt man hier einen "INNER JOIN".
 
Zuletzt bearbeitet von einem Moderator:
Mit JOIN ist es natürlich die eleganteste Lösung, klar!
Aber mal ganz ehrlich, wenn Du den Fehler in der einfachen while-Schleife nicht erkennst, befürchte ich, daß Du auf ganz andere Probleme treffen wirst.
Klar sollte man "vernünftige" SQL-Abfragen verwenden, aber hier geht es glaube ich um grundlegende Probleme bei der Schleifenprogrammierung in PHP...

Nee mein Problem momentan ist das ich mit SQL<>PHP net frisch werde...
und wenn ich alles in eine einzige schleife paken kann/könnte ist es doch besser wie alles php erledingen zu lassen oder irre ich mich da ?
weil ansich könnte ich ja das ganze was ich hier bis jetzt "Hingezimmert" habe ganz vergessen ;)

mfg Spikaner
 
Sicher kannst Du das alles übern Haufen werfen und mit einer sauberen SQL-Abfrage einiges an PHP-Code sparen.
Aber Du wirst irgendwann mal wieder eine while-Schleife in PHP verwenden wollen und dann wirst Du dieselben Verständnisprobleme haben, wie jetzt!
Aber dann gibt es vielleicht auch wieder eine Alternativ-Lösung, um sich mit dem Problem nicht weiter beschäftigen zu müssen... ;)
 
Statt while solltest du eine For-Schleife nehmen:

PHP:
$i =0;
while($data = mysql_fetch_array($result)){
$id[$i] = $data['plrid'];
$skill[$i] = $data['skill'];
$i++;
}
 
Hab es nun so gelöst
PHP:
$sql = "SELECT
    t1.plrid,
    t1.skill,
    t2.name
      FROM
    ps_plr as t1,
    ps_plr_ids_name as t2
      WHERE
    t1.plrid = t2.plrid
ORDER BY 
    skill desc
LIMIT 0, 10";
$result = mysql_query ($sql);
$i =0;
while($data = mysql_fetch_array($result)){
    $id[$i] = $data['plrid'];
    $skill[$i] = $data['skill'];
    $name[$i] = $data['name'];
    $i++;
}
mfg Spikaner
 
Zurück