Problem mit Schleifen ! Kann jemand helfen ?
Da du aber den alten Wert immer überschreibst, könnte das hier auch nützlich sein: http://www.mysql.com/doc/en/REPLACE.htmlhttp://www.mysql.com/doc/en/UPDATE.html hat geschrieben:Starting with MySQL Version 4.0.4, you can also perform UPDATE operations that cover multiple tables:Code: Alles auswählen
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
Hi Leute,
also ich bekomme das Script einfach nicht zu laufen, egal was ich mache. Mein Probescript sieht jetzt so aus:
Meine tab1 sieht so aus:
Und meine tab2 sieht so aus:
Die Punkte werden alle richtig berechnet und alles funktioniert, bis auf das reinschreiben in die tab2. Die ja jetzt so
aussehen sollte:
Ich schaue schon in meine PHP Bücher aber ich kriege es wirklich nicht hin. Kann mir jemand von euch sagen was ich in meinem
Script unter // Update Punkte oder auch wo anders schreiben muss, damit es die gewünschte Aktion ergibt ? Bitte helft mir,
ich werd noch ganz bescheurt wenn ichs schon nicht bin. Bitte, bitte helft mir.
also ich bekomme das Script einfach nicht zu laufen, egal was ich mache. Mein Probescript sieht jetzt so aus:
Code: Alles auswählen
<? include('open.inc3.php'); ?>
<?
$sql = 'SELECT * FROM tab1, tab2';
$result = mysql_query($sql, $conn);
if ($result)
{
$number = mysql_num_rows($result);
echo '<P>Es sind ';
echo $number;
echo ' Datensätze gelesen worden.</p>';
echo '<TABLE BORDER="0">';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
// Tore A
$sql2 = 'UPDATE tab1 SET punkte_a = \'';
if ($row['tore_a'] > $row['tore_b'])
{
$sql2 .= '3';
}
elseif ($row['tore_a'] < $row['tore_b'])
{
$sql2 .= '0';
}
else
{
$sql2 .= '1';
}
$sql2 .= '\' WHERE spiel_id = ' . $row['spiel_id'];
$result2 = mysql_query($sql2, $conn);
// Tore B
$sql3 = 'UPDATE tab1 SET punkte_b = \'';
if ($row['tore_a'] > $row['tore_b'])
{
$sql3 .= '0';
}
elseif ($row['tore_a'] < $row['tore_b'])
{
$sql3 .= '3';
}
else
{
$sql3 .= '1';
}
$sql3 .= '\' WHERE spiel_id = ' . $row['spiel_id'];
echo "<P>Abfrage 1: <pre>$sql3</pre>";
$result3 = mysql_query($sql3, $conn);
// Berechnung Punkte
$sql8 = "SELECT sum(if(team_a_id='$row[team_a_id]', punkte_a, punkte_b)) FROM tab1 WHERE team_a_id='$row[team_a_id]' OR team_b_id='$row[team_a_id]'";
echo "<P>Abfrage 2: <pre>$sql8</pre>";
$result8 = mysql_query($sql8, $conn);
// Update Punkte
$sql7 = "UPDATE tab2 SET tab2.punkte = 'XY' WHERE XY";
echo "<P>Abfrage letzte: <pre>$sql7</pre>";
$result7 = mysql_query($sql7, $conn);
//
if ($result8) {
$number = mysql_num_rows($result8);
echo "<TABLE BORDER=0>";
while ($row = mysql_fetch_array($result8, MYSQL_ASSOC)) {
echo "<TR><TD>";
echo implode("<TD>",$row);
echo "</TR>";
}
echo "</TABLE>";
} else {
echo "<P>".mysql_error($conn);
}
}
}
else
{
echo '<p>' . mysql_error($conn) . '</p>';
}
mysql_close($conn);
?>
Code: Alles auswählen
| spiel_id | team_a_id | team_b_id | tore_a | tore_b | punkte_a | punkte_b |
----------------------------------------------------------------------------
| 1 | 1 | 2 | 3 | 1 | 3 | 0 |
| 2 | 2 | 4 | 2 | 3 | 0 | 3 |
| 3 | 3 | 1 | 2 | 2 | 1 | 1 |
Code: Alles auswählen
| team_id | tore | punkte |
---------------------------
| 1 | | |
| 2 | | |
| 3 | | |
| 4 | | |
aussehen sollte:
Code: Alles auswählen
| team_id | tore | punkte |
---------------------------
| 1 | | 4 |
| 2 | | 0 |
| 3 | | 1 |
| 4 | | 3 |
Script unter // Update Punkte oder auch wo anders schreiben muss, damit es die gewünschte Aktion ergibt ? Bitte helft mir,
ich werd noch ganz bescheurt wenn ichs schon nicht bin. Bitte, bitte helft mir.
Dein Problem liegt wohl hier:
Gruß, Philipp
Code: Alles auswählen
$sql7 = "UPDATE tab2 SET tab2.punkte = 'XY' WHERE XY";
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Code: Alles auswählen
REPLACE INTO tab2 (team_id, tore, punkte)
SELECT X, sum(if(team_a_id=X, punkte_a, punkte_b)), sum(if(team_a_id=X, tore_a, tore_b))
FROM tab1
WHERE team_a_id=X OR team_b_id=X
Hallo leute,
ich danke dir Pyramide. Das Probescript läuft bis jetzt so wie gewünscht, naja fast. Das Script sieht jetzt so aus:
Sind da keine Fehler drin ? Das Script läuft ja. Danke nochmals. Aber eine Frage habe ich da noch. Ich habe jetzt in meine
tab2 hinter die team_id die Spalte spiele eingefügt. Dort sollen die Spiele eingefügt werden die jede Mannschaft
absolviert hat. Aber wie mache ich das ? Kann man das irgendwie in den Befehl, den du mir geschrieben hast, einbauen ?
Wenn ich eine neue SELECT Anweisung erstelle zählt er zwar die Spiele, aber nicht für jede einzelne Mannschaft sondern er
zählt alle zusammen. Also ich bekomme dann bei allen z.B eine 7. Was kann ich da tun ? Und nochmals vielen dank das du mir
soweit geholfen hast mit dem Script. Ciao.
ich danke dir Pyramide. Das Probescript läuft bis jetzt so wie gewünscht, naja fast. Das Script sieht jetzt so aus:
Code: Alles auswählen
<? include('open.inc3.php'); ?>
<?
$sql = 'SELECT * FROM tab1, tab2';
$result = mysql_query($sql, $conn);
if ($result)
{
$number = mysql_num_rows($result);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
// Tore A
$sql2 = 'UPDATE tab1 SET punkte_a = \'';
if ($row['tore_a'] > $row['tore_b'])
{
$sql2 .= '3';
}
elseif ($row['tore_a'] < $row['tore_b'])
{
$sql2 .= '0';
}
else
{
$sql2 .= '1';
}
$sql2 .= '\' WHERE spiel_id = ' . $row['spiel_id'];
$result2 = mysql_query($sql2, $conn);
// Tore B
$sql3 = 'UPDATE tab1 SET punkte_b = \'';
if ($row['tore_a'] > $row['tore_b'])
{
$sql3 .= '0';
}
elseif ($row['tore_a'] < $row['tore_b'])
{
$sql3 .= '3';
}
else
{
$sql3 .= '1';
}
$sql3 .= '\' WHERE spiel_id = ' . $row['spiel_id'];
$result3 = mysql_query($sql3, $conn);
// Update + Berechnung Punkte und Tore
$sql7 = "REPLACE INTO tab2 (team_id, punkte, tore) SELECT '$row[team_a_id]', sum(if(team_a_id='$row[team_a_id]', punkte_a, punkte_b)), sum(if(team_a_id='$row[team_a_id]', tore_a, tore_b)) FROM tab1 WHERE team_a_id='$row[team_a_id]' OR team_b_id='$row[team_a_id]'";
$result7 = mysql_query($sql7, $conn);
}
}
else
{
echo '<p>' . mysql_error($conn) . '</p>';
}
mysql_close($conn);
?>
<? include("open.inc3.php"); ?>
<?
$sql8 = "SELECT * FROM tab2, tab3 WHERE tab2.team_id = tab3.team_id";
$result8 = mysql_query($sql8, $conn);
if ($result8) {
$number = mysql_num_rows($result8);
echo "<P>Es sind $number Datensätze gelesen worden.";
echo "<TABLE BORDER=1>";
while ($row = mysql_fetch_array($result8, MYSQL_ASSOC)) {
echo "<TR>";
echo "<TD>",$row['ganz_name'];
echo "<TD>",$row['tore'];
echo "<TD>",$row['punkte'];
echo "</TR>";
}
echo "</TABLE>";
} else {
echo "<P>".mysql_error($conn);
}
mysql_close($conn);
?>
tab2 hinter die team_id die Spalte spiele eingefügt. Dort sollen die Spiele eingefügt werden die jede Mannschaft
absolviert hat. Aber wie mache ich das ? Kann man das irgendwie in den Befehl, den du mir geschrieben hast, einbauen ?
Wenn ich eine neue SELECT Anweisung erstelle zählt er zwar die Spiele, aber nicht für jede einzelne Mannschaft sondern er
zählt alle zusammen. Also ich bekomme dann bei allen z.B eine 7. Was kann ich da tun ? Und nochmals vielen dank das du mir
soweit geholfen hast mit dem Script. Ciao.
Du hast deine Tabellen aber nicht wirklich tab1,tab2,tab3 genannt, oder?
Wozu ist das hier?
Lässt sich viel effizienter so realisieren:
Wozu ist das hier?
Condor hat geschrieben:SELECT * FROM tab1, tab2
Code: Alles auswählen
$sql2 = 'UPDATE tab1 SET punkte_a = \'';
if ($row['tore_a'] > $row['tore_b'])
{
$sql2 .= '3';
}
elseif ($row['tore_a'] < $row['tore_b'])
{
$sql2 .= '0';
}
else
{
$sql2 .= '1';
}
$sql2 .= '\' WHERE spiel_id = ' . $row['spiel_id'];
$result2 = mysql_query($sql2, $conn);
// Tore B
$sql3 = 'UPDATE tab1 SET punkte_b = \'';
if ($row['tore_a'] > $row['tore_b'])
{
$sql3 .= '0';
}
elseif ($row['tore_a'] < $row['tore_b'])
{
$sql3 .= '3';
}
else
{
$sql3 .= '1';
}
$sql3 .= '\' WHERE spiel_id = ' . $row['spiel_id'];
$result3 = mysql_query($sql3, $conn);
Code: Alles auswählen
UPDATE tab1 SET punkte_a=3, punkte_b=0 WHERE tore_a>tore_b;
UPDATE tab1 SET punkte_a=0, punkte_b=3 WHERE tore_a<tore_b;
UPDATE tab1 SET punkte_a=1, punkte_b=1 WHERE tore_a=tore_b;
Wenn ich eine neue SELECT Anweisung erstelle zählt er zwar die Spiele, aber nicht für jede einzelne Mannschaft sondern er
zählt alle zusammen. Also ich bekomme dann bei allen z.B eine 7. Was kann ich da tun ?
Code: Alles auswählen
SELECT tab2.team_id, count(tab1.*) AS spiele
FROM tab2
LEFT JOIN tab1 ON (tab2.team_id = tab1.team_a_id OR tab2.team_id = tab1.team_b_id)
GROUP BY tab1.team_id
Hallo,
wenn ich das hier eingebe:
Dann kommt diese Fehlermeldung:
Was mache ich falsch ?
wenn ich das hier eingebe:
Code: Alles auswählen
SELECT tab2.team_id, count(tab1.*) AS spiele FROM tab2 LEFT JOIN tab1 ON (tab2.team_id = tab1.team_a_id OR tab2.team_id = tab1.team_b_id) GROUP BY tab1.team_id";
Code: Alles auswählen
You have an error in your SQL syntax near '*) AS spiele FROM tab2 LEFT JOIN tab1 ON (tab2.team_id = tab1.team_a_id OR tab2.' at line 1
Count funktioniert scheinbar nur mit Aliasen:
Code: Alles auswählen
SELECT t.team_id, count(s.spiel_id) AS anzahl_spiele
FROM teams t
LEFT JOIN spiele s ON (t.team_id = s.team_a_id OR t.team_id = s.team_b_id)
GROUP BY t.team_id