UPDATE in WHILE Schleife wird nur einmal ausgeführt

Xiaodeguo

Mitglied
Hallo,

ich habe folgendes Problem,
in meiner WHILE Schleife sollen die Daten von Usern erfasst und dann geupdated werden.
Das Problem ist er macht es nur mit dem ersten Spieler. Wenn ich aber anstatt der UPDATE Anweisung ein ECHO ausgeben lasse, gibt er mir die richtigen informationen für alle Spieler.

Was ist falsch und wie ist es richtig? Wäre sehr dankbar für jede hilfreiche Antwort:

Quellcode:
PHP:
<?php
include ('config.php');
error_reporting(E_ALL);    
$db_link = @mysql_connect($dbhost, $dbusername, $dbpasswort);  
mysql_select_db($dbname); 

/**
 * ALLGEMEINE ABFRAGE ALLER SPIELER
 */

$sql = "SELECT *
                FROM ".$tabspieler."
                ORDER BY ID_spieler DESC";
                
                $result = mysql_query($sql);
                while ($data = mysql_fetch_object($result)){
            
            /**
             * BERECHNET DIE PUNKTE DES SPIELER *ADDITION*
             */
            
            $abfrage =  "SELECT SUM(punkte) AS punkte2 
                        FROM ".$tabtipps."
                        WHERE
                        k_spieler = '".$data->k_name."'";
                        
                        $ergebnis=mysql_query($abfrage);
                        $wert2= mysql_fetch_array($ergebnis);
                        
            /**
              * ENTNIMMT DIE ABGEGEBEN TIPPS UND ERSTELLT DEN WERT PUNKTE PRO TIPP
              */ 
            
            $abfrage2 = "SELECT * 
                        FROM ".$tabtipps."
                        WHERE
                        k_spieler = '".$data->k_name."'";
                        
                        $ergebnis2=mysql_query($abfrage2);
                        
                        $rows = mysql_num_rows($ergebnis2);
                        $td = $wert2["punkte2"]/$rows;
            /**
             * UPDATED DIE SPIELER INFORMATION
             */
            
            
            $sql =      "UPDATE ".$tabspieler."
                        SET
                        g_punkte = '".$wert2["punkte2"]."',
                        t_punkte = '".number_format($td,2)."',
                        g_tipps = '".$rows."'
                        WHERE
                        k_name = '".$data->k_name."'";        
                        
                 
}
?>
 
Hallo Yaslaw,

erstmal Danke für deine sehr schnelle Antwort.
Nun muss ich dir gestehen, ich bin noch weit am Anfang mit PHP und habe nur wenig Erfahrung.
Daher kann ich mit deiner Aussage, dass keine Ausführung von $sql in der Schleife vorhanden ist nicht viel anfangen.

Wäre dir dankbar wenn du mir das erklären könntest.
 
Du führst dein $SQL nirgens aus in deinem Beispiel.

Aber was anderes. Du kannst dieses ganze Script in ein einziges SQL packen
SQL:
UPDATE
	{$tabspieler} AS spieler,
	(
		SELECT
			k_spieler,
			SUM(punkte) AS s_punkte,
			COUNT(*) AS g_tipps,
			SUM(punkte)/COUNT(*) AS t_punkte
		FROM
			{$tabtipps}
		GROUP BY
			k_spieler
	) AS tipps
SET
	spieler.s_punkte = tipps.s_punkte,
	spieler.g_tipps  = tipps.g_tipps,
	spieler.t_punkte = tipps.t_punkte
WHERE
	spieler.k_spieler = tipps.k_spieler;
In PHP könnte dass dann so aussehen
PHP:
$sql = <<<SQL
UPDATE
	{$tabspieler} AS spieler,
	(
		SELECT
			k_spieler,
			SUM(punkte) AS s_punkte,
			COUNT(*) AS g_tipps,
			SUM(punkte)/COUNT(*) AS t_punkte
		FROM
			{$tabtipps}
		GROUP BY
			k_spieler
	) AS tipps
SET
	spieler.s_punkte = tipps.s_punkte,
	spieler.g_tipps  = tipps.g_tipps,
	spieler.t_punkte = tipps.t_punkte
WHERE
	spieler.k_spieler = tipps.k_spieler;
SQL;
mysql_query($sql);
 
Zuletzt bearbeitet von einem Moderator:
Hallo Vaslaw,

erneut ein dicken Dank für deine Hilfe, du hast mir gleich in mehrer Hinsicht geholfen.

1. Ausführung der $sql muss vorhanden sein (Dies habe ich nun verstanden).
2. Man kann Abfragen verschachteln und muss nicht jedes mal einen eigenen Befehl tippen.
3. Man kann schon in der SQL Abfrage neue Variabeln bestimmen.

So und zu guter Letzt, hier nun der funktionierende Code:

PHP:
<?php

include ('config.php');                                         

error_reporting(E_ALL);                                         
$db_link = @mysql_connect($dbhost, $dbusername, $dbpasswort);  
mysql_select_db($dbname); 

$sql = "UPDATE ".$tabspieler." AS spieler,
        (SELECT 
            k_spieler, 
            SUM(punkte) AS g_punkte, 
            COUNT(*) AS g_tipps, 
            SUM(punkte)/COUNT(*) AS t_punkte
        FROM
            ".$tabtipps."
            GROUP BY
            k_spieler) AS tipps
        SET
            spieler.g_punkte = tipps.g_punkte,
            spieler.g_tipps  = tipps.g_tipps,
            spieler.t_punkte = tipps.t_punkte
        WHERE
            spieler.k_name = tipps.k_spieler";


 
mysql_query($sql) OR              
die("Query: <pre>".$sql."</pre>\n".                  
"Fehler: ".mysql_error());
mysql_close($sql);  

header ("Location: index.php?act=ranking.php");
?>
 
Zurück