SQL 2 Tabellen abgleichen und Spalte summieren

Steusi

Nasenbär
Hallo Leute,
ich scheitere an einer bestimmten SQL Abfrage.
Ich habe 2 Tabellen, die wie folgt aussehen:

Tab1:
Code:
| Artikelnummer | Kostenstelle
| 001           | 5
| 002           | 5
| 003           | 6

Tab2:
Code:
| Artikelnummer | Kosten
| 001           | 2,5
| 001           | 0,15
| 002           | 2,5
| 002           | 0,15
| 002           | 3,08
| 003           | 2,5
| 003           | 0,15

In Abhängigkeit von der Artikelnummer möchte ich alle Kosten aufsummieren und der Kostenstelle zuordnen, damit es dann folgendermaßen aussieht:
Code:
| Kostenstelle | Kosten
| 5            | 8,38
| 6            | 2,65

Das Ganze versuche ich mit folgendem PHP-Script (auf das wesentliche gekürzt und verdeutscht) zu realisieren:

PHP:
$select_all = mysql_query("SELECT Artikelnummer,Kostenstelle FROM Tab1 ORDER BY Kostenstelle");

$i = 0;
$all_cost_unit = array();
while($export = mysql_fetch_object($select_all)){

    $sum_qry = mysql_query("SELECT SUM(Kosten) as summe
                        FROM Tab2
                        WHERE Artikelnummer
                        LIKE '$export->Artikelnummer'");
    $sum = mysql_fetch_object($sum_qry);

    // Speichert alle unterschiedlichen Kostenstellen
    $arr_id = $export->Kostenstelle;
    if(!in_array($arr_id, $all_cost_unit)){
        $all_cost_unit[$i] = $arr_id;
        $cost_sum[$i] = 0;
        $i++;
    }
    // Summe errechnen, je Kostenstelle errechnen
    $cost_sum[$i-1] += $sum->summe;

}

Gibt es keine scharmantere Lösung, als 2 Datenbankanfragen. Momentan wird für jedes Select ein weiteres Select ausgeführt, was natürlich ganz schon Zeitaufwendig ist.
 
Lass doch einfach die Datenbank die Arbeit machen:

SQL:
SELECT kostenstelle, sum(kosten) FROM tab1 INNER JOIN tab2 ON tab1.Artikelnummer = tab2.Artikelnummer GROUP BY kostenstelle

Ist nicht getestet, sollte aber so stimmen.
 
Zuletzt bearbeitet von einem Moderator:
Danke, wunderbar genau so wollte ich es haben.
Konnte meine Zeit von 1336ms auf 2,2 ms reduzieren!
 
Zurück