Problem beim verketteten(?) Abfragen von MySQL Tabellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
argument
code
dank
eintrag
ergebnis
fehler
fehlermeldung
not
problem
punkt
set
spieler
spielername
syntax
tabelle
text
update
url
zeile
-
Hallo Profis,
ich bin neu in PHP und MySQL, deshalb ist vermutlich mein Problem, das ich habe auch trivial, trotzdem wäre es schön, wenn ihr mir helfen könntet. Ich bin gerade dabei einen Ergebnisdienst für unseren Tischfußballverein zu bauen
Ich habe drei Tabellen:
+Spieler
-Beinhaltet die Namen aller Spieler
+Eintrag
-Hier werden alle Spielergebnisse gespeichert
+Hausliga
-Die Tabelle, in der alle Ergebnisse ausgewertet abgelegt werden.
Nun möchte ich die Spielernamen aus der Tabelle Spieler abrufen, die Punkte für jeden einzelnen errechnen lassen und diese dann in die Tabelle Hausliga schreiben lassen.
Wenn ich diesen Code jedoch ausführen lasse, bekomme ich zwei Fehlermeldungen:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /data/multiserv/users/589801/projects/2052548/www/logindex.php on line 47
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /data/multiserv/users/589801/projects/2052548/www/logindex.php on line 43
$abfrage = "SELECT spieler FROM Spieler";
$ergebnis = mysql_query($abfrage);
while($spieler = mysql_fetch_object($ergebnis)) //Zeile 43
{
$abfrage = "SELECT SUM(punkte) WHERE spieler= '".$spieler->spieler."' as gespunkte FROM Eintrag";
$ergebnis = mysql_query($abfrage);
$punkte = mysql_fetch_object($ergebnis); //Zeile 47
$aendern = "UPDATE Hausliga Set
punkte = '".$punkte->gespunkte."'
WHERE name = '".$spieler->spieler."'";
$update = mysql_query($aendern);
}
Ich weiß, dass das Thema Redundanz immer ganz groß geschrieben wird und ich mit der Dopplung der Spielernamen dagegen verstoße. Aber das dürfte doch nicht Ursache für mein Problem sein oder?
Danke schon mal für eure Antworten :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo bergewoelfe,
kann es sein, dass die Abfrage fehlschlägt und daher $ergebnis == FALSE ist?
Versuche mal folgendes:
Was mir noch aufgefallen ist: In den Abfragen fangen die Tabellenname mit Großbuchstaben an. Es kann sein, dass Du den Name daher in Backticks setzen musst sofern die Tabellenamen wirklich mit Großbuchstaben beginnen:$ergebnis = mysql_query($abfrage); if (!$ergebnis) { die('MySQL Fehler: ' . mysql_error()); }
undSELECT spieler FROM `Spieler`
UPDATE `Hausliga` SET ...
-
Das habe ich jetzt ausprobiert. Zuerst meinte er die Syntax wäre falsch. Nachdem ich das geändert hatte trug er dennoch nichts in die Tabelle Hausliga ein, gab aber auch keinen Fehler aus. Mit den Hochkommata habe ich auch ausprobiert. Da hat sich aber auch nichts zum positiven entwickelt....
Hoffe ihr könnt mir nochmal weiterhelfen...:) -
Hallo bergewoelfe,
kannst Du vielleicht mal kurz angeben, wie die Tabellen genau aussehen? Oder vielleicht sogar die CREATE TABLE Statements?
Wichtig währe der genaue Tabellenname und der genaue Spalten-/Feldname (Groß-/Kleinschreibung beachten).
In etwa so (oder soweit wie Du halt kommst):
Tabelle: Spieler
id SERIAL PRIMARY KEY
spieler TEXT NOT NULL
...
Edit: Die Punkteabfrage muss so aussehen:
und beim UPDATE kannst Du eigentlich auf die Hochkommata bei 'punkte' verzichten, da es sich um ein Zahl und nicht um Text handelt:SELECT SUM(punkte) AS gespunkte WHERE spieler= '".$spieler->spieler."' FROM Eintrag
$aendern = "UPDATE Hausliga SET punkte = ".$punkte->gespunkte." WHERE name = '".$spieler->spieler."'";
Beitrag zuletzt geändert: 3.5.2012 23:18:51 von darkpandemic -
probiere es mal so. wenn 'ERROR' rot zu sehen ist, dann ist es noch immer schlimm :o(
<?php error_reporting(E_ALL | E_STRICT); $abfrage1 = "SELECT spieler FROM Spieler"; if(!$ergebnis1 = mysql_query($abfrage1)) {err(__LINE__);} while($spieler = mysql_fetch_object($ergebnis1)) { //Zeile nn $abfrage2 = <<< EOT SELECT SUM(punkte) gespunkte FROM Eintrag WHERE spieler= '{$spieler->spieler}' EOT; if(!$ergebnis2 = mysql_query($abfrage2)) {err(__LINE__);} $punkte = mysql_fetch_object($ergebnis2); //Zeile nn+9 $aendern = <<< EOT UPDATE Hausliga SET punkte={$punkte->gespunkte} WHERE name='{$spieler->spieler}' EOT; if(!$update = mysql_query($aendern)) {err(__LINE__);} } exit('kein fehler ist aufgetreten'); function err($line) { exit('<p style="color:#f00;font-weight:bold;">ERROR:</p><pre>'.print_r(array(mysql_errno(), mysql_error()), true)); }
vorschlag: strukturiere deine queries immer so
auch dann wenn's ganz einfach ist, weil dann kommt keine blöde aussage wie 'syntax fehler in zeile 1 ...'.SELECT ... FROM ... WHERE ... ...
bemerkungen:
1. error_reporting ist immens wichtig für die entwicklung. (es gibt leute, die fehlermeldungen mit @ unterdrücken. geselle dich nicht zu dieser gruppe. wenn du keinen fehler mehr hast kannst es auskommentieren);
2. du überschreibst in der while schleife deine schleifenwariable '$ergebnis' (so habe ich $ergebnis2 engeführt);
3. @darkpandemic
ist noch immer inkorrekt;SELECT SUM(punkte) AS gespunkte WHERE spieler= '".$spieler->spieler."' FROM Eintrag
4. richtig gemacht brauchst du das ganze brimborium von
übrhaupt nicht (hochkomma setzung). erhöht die lesbarkeit ;)...'". $bls . "' ...
==== EDIT:
in der eile ist es ausgeblieben, sehe dir mal auch das an: SELECT ... FOR UPDATE
Beitrag zuletzt geändert: 4.5.2012 13:47:53 von hemiolos -
Oh man ja :D Ich sagte ja, der Fehler sei total dämlich.... Danke schön :)
Aber uaf das mit der fehlerhaften Syntax wäre ich nicht gekommen, hättest du es nicht gesagt. Jetzt funktioniert alles und ich bin glücklich :)
Das mit der Unsicherheit der UPDATE Funktion schau ich mir nachher mal genauer an.
Und danke auch für die Tipps :)
Und auch darkpandemic hat mich weiter gebracht. Hatte nämlich die Spalte Punkte als VARCHAR deklariert, weil er bei INT immer aufgerundet hat, anstatt FLOAT zu nehmen :)
Also nochmal danke schön euch beiden für die Mühe :)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage