Verfasst: 16.11.2003 20:18
Ich muss ja updaten da in der tab1 ja weitere datensätze also spielbegegnungen gespeichert werden und somit neue Punkte zusammen gezählt werden, welche auch in der tab2 wieder geupdate werden müssen.
phpBB.de - Die deutsche phpBB-Community
https://www.phpbb.de/community/
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;
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 | | |
Code: Alles auswählen
| team_id | tore | punkte |
---------------------------
| 1 | | 4 |
| 2 | | 0 |
| 3 | | 1 |
| 4 | | 3 |
Code: Alles auswählen
$sql7 = "UPDATE tab2 SET tab2.punkte = 'XY' WHERE XY";
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
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);
?>
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
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
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