jhe1960
Goto Top

MySQL - 2 Tabellen - 1 Summe

Hallo Forum,

ich verzweifel gerade an einem MySQL Query...

ich möchte aus 2 Spalten die sich in 2 verschiedenen Tabellen befinden, eine Summe bilden.

Tabelle1 = f53wb_addontracks2, Feld: Length
Tabelle2 = f53wb_streckenstd, Feld: Length

Diverse Versuche mit z.B.:

SELECT
  SUM(f53wb_addontracks2.Length), (f53wb_streckenstd.Length)
FROM
  f53wb_addontracks2, f53wb_streckenstd

sind nicht erfolgreich gewesen.

Wer mag mir da helfen?

Gruß

Juergen

P.S: es wäre sehr nett, wenn die Antwort nicht zu kryptisch ausfallen würde, da ich ein Laie in Sachen MySQL bin...

Content-ID: 181024

Url: https://administrator.de/contentid/181024

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

dog
dog 24.02.2012 um 18:43:52 Uhr
Goto Top
Diverse Versuche mit z.B.:

Was sollte da auch passieren?

Ein FROM a,b bildet ein Kreuzprodukt, also jede Zeile von a mal jede Zeile von b.

mysql> SELECT * FROM a;
+------+
| fld  |
+------+
| 1    |
| 2    |
+------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM b;
+------+
| fld  |
+------+
| a    |
| b    |
+------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM a,b;
+------+------+
| fld  | fld  |
+------+------+
| 1    | a    |
| 2    | a    |
| 1    | b    |
| 2    | b    |
+------+------+
4 rows in set (0.00 sec)

Was willst du überhaupt?
Von zwei getrennten Tabellen völlig unabhängig die Summe berechnen?
Dann so:
SELECT 
  (SELECT SUM(fld) FROM a) AS col1, 
  (SELECT SUM(fld) FROM b) AS col2;
sam24
sam24 24.02.2012 um 22:32:01 Uhr
Goto Top
Hallo Juergen

ich denke was du haben willst (oder eigentlich nicht haben willst)

SELECT 
  SUM(f53wb_addontracks2.Length + f53wb_streckenstd.Length) 
FROM 
  f53wb_addontracks2, f53wb_streckenstd

das würde die Summe dieser beiden Spalten bilden. ABER: Sql Datenbanken sind mengen, nicht zeilen orientiert. Mit diesem Konstrukt würdest du eine Kartesisches Produkt erzeugen. In den seltensten Fällen ist das gewünscht. Normalerweise werden Tabellen über eindeutige Werte / Schlüssel verknüpft.

Was ist das ? guggscht du hier http://de.wikipedia.org/wiki/Kartesisches_Produkt

Gruß Sam
jhe1960
jhe1960 25.02.2012 um 10:03:40 Uhr
Goto Top
Zitat von @dog:
Was willst du überhaupt?
Von zwei getrennten Tabellen völlig unabhängig die Summe berechnen?
Dann so:
> SELECT 
>   (SELECT SUM(fld) FROM a) AS col1, 
>   (SELECT SUM(fld) FROM b) AS col2;
> 

Wie ich Eingangs geschrieben habe, die Summe aus beiden Tabellen 1 Summe bilden.

Tabelle1 Tabelle2
150 200
300 75

Summe: 725

Wie würde ich denn col1 und col2 zusammen bekommen?

Gruß

Juergen

@dog & sam24

vielen Dank für die ausführliche Erklärung.
sam24
sam24 25.02.2012 um 10:33:29 Uhr
Goto Top
Hallo Juergen,

wenn das wirklich alle Felder deiner Tabelle sind, nur über 2 einzelne Abfragen. Sobald du diese Tabellen verknüpfst, wird dein Ergebnis nicht mehr stimmen (Erklärung siehe oben).

+-----------+ 
| Tabelle1  | 
+-----------+ 
| 150       | 
| 300       | 
+-----------+ 

+-----------+ 
| Tabelle2  | 
+-----------+ 
| 200       | 
| 75        | 
+-----------+ 

Entweder mit 2 summen leben, oder über ein temporäre Tabelle / stored procedure lösen.

Gruß Sam
nxclass
nxclass 25.02.2012 um 23:33:12 Uhr
Goto Top
Wenn dann mit Union verbinden
SELECT SUM(x.`sum`) FROM (

  SELECT SUM(`Length`) AS 'sum' FROM `f53wb_addontracks2`  
  UNION
  SELECT SUM(`Length`) AS 'sum' FROM `f53wb_streckenstd`  

) x;

oder gleich
SELECT (SELECT SUM(`Length`) AS 'sum' FROM `f53wb_addontracks2`) + (SELECT SUM(`Length`) AS 'sum' FROM `f53wb_streckenstd`) ;  
jhe1960
jhe1960 26.02.2012 um 11:35:33 Uhr
Goto Top
Moin,

vielen Dank, das hat mir jetzt schon super weiter geholfen. Im PMA wird mir bei der Abfrage schon mal die richtige Summe ausgegeben. Jetzt habe ich nur noch (wahrscheinlich) ein klitzekleines Problemchen...wenn ich das ganze versuche auszugeben, passiert nüschte face-sad

<?php
$sql = "SELECT (SELECT SUM(Length2) AS summe FROM f53wb_addontracks2) + (SELECT SUM(Length) AS summe FROM f53wb_streckenstd)";  
$result = mysql_query($sql) or die(mysql_error());
while ($output = mysql_fetch_assoc($result))
{
echo $result[summe]; //da sollte doch eigentlich die Summe ausgegeben werden?
}
?>

Kannst du mir da evtl. auch noch auf die "Sprünge" helfen?

Schönen Sonntag noch.

Juergen
nxclass
nxclass 26.02.2012 um 12:01:11 Uhr
Goto Top
... ich sehe Du speicherst das Ergebnis in $output aber fragst $result ab:
echo $output['summe'];  

... weiterhin gefällt mir dein Quoting nicht besonders und das SQL Ergebnis hat keinen definierten "Spaltennamen".
$sql = <<<__SQL__
SELECT (SELECT SUM(`Length2`) FROM `f53wb_addontracks2`) + (SELECT SUM(`Length`) FROM `f53wb_streckenstd`) AS 'summe'  
__SQL__;
jhe1960
jhe1960 18.08.2013 aktualisiert um 13:29:03 Uhr
Goto Top
Moinsen,
ich bin jetzt schon ein Stück weiter, hänge aber noch an 1 Problem. Vielleicht ist jemand so nett und hilft mir weiter...

Mit folgendem Schnipsel selektiere ich Datensätze für eine Ausgabe. Jetzt möchte ich noch die Option einbauen, dass man alle Datensätze (track) auswählen kann, um sich die Anzeigen zu lassen.

<?php
include('dbconnection.php');  

$sql="SELECT ID, TrackTitle FROM tracks ORDER BY TrackTitle ASC";  

$result = mysql_query($sql);

echo "<select name=\"track\" id=\"track\" onmouseover=\"Tip('<b>$trackFilter</b><br />$trackFilterText', BALLOON, true, ABOVE, true)\" onmouseout=\"UnTip()\">";  
echo "<option value=\"\">$tracks</option>";  

while($row = mysql_fetch_array($result))
  {
  if($isUTF8Encode) echo "<option value=\"".$row['ID']."\">" . utf8_encode($row['TrackTitle']) . "</option>";  
  else  echo "<option value=\"".$row['ID']."\">" .$row['TrackTitle']. "</option>";  
  }
echo "</select>";  

mysql_close($con);
?>

Hier sieht man das Live: http://www.project-race.de/tracker/boxengasse.html

Bei dem Dropdown "Strecken" soll die Möglichkeit gegeben sein, alle Strecken auszuwählen.

Sonntägliche Grüße,
Juergen