[MySQL] Tabellen verknüpfen mit Berechnung

Du hast wieder die id_kunde bei deiner Verknüpfung vergessen.

Schön, die Tabellen. Aber welches sind die Schlüsselfelder in wareneingang und warenausgang?

Ist id_warenart auch ein Schlüsselfeld? Wenn ja, ab in den JOIN damit
 
Also, dann frag ich anderst. Gibt es pro Kombination id_kunde & id_artikel mehrere id_warenart?
 
Nein, es gibt pro id_kunde & id_artikel nur eine id_warenart.
Ich versuche gerade herauszufinden worauf Du hinaus willst, liegt es an der Abfrage im ON-Teil das ich dort einfach die Beziehung zwischen den tabellen falsch darstelle****
 
Hallo,

nun bin ich schon ein Stück weiter und auch schlauer.
Mein Weg zum Erfolg wird wahrscheinlich kein JOIN sein sondern eine korrelierte Unterabfrage, welche ich mir schon zusammengeschustert habe, aber noch nicht 100%ig funktioniert.

So sieht meine Abfrage nun aus
SQL:
SELECT we.id_kunde, we.id_artikel AS ein_artikel, we.id_warenart AS ein_warenart, we.datum AS ein_datum, wa.id_kunde, wa.id_artikel, wa.id_warenart, wa.datum AS aus_datum,
       (SELECT SUM(we.anzahl) FROM wareneingang we WHERE we.id_kunde = $kunde AND we.id_artikel = wa.id_artikel AND we.id_warenart = wa.id_warenart) ein_anzahl,
       (SELECT SUM(wa.anzahl) FROM warenausgang wa WHERE wa.id_kunde = $kunde AND wa.id_artikel = we.id_artikel AND wa.id_warenart = we.id_warenart) aus_anzahl
FROM wareneingang we, warenausgang wa
WHERE we.id_kunde = $kunde
GROUP BY we.id_kunde, we.id_artikel, we.id_warenart
In der Spalte Wareneingang bekomme ich zumindest in der ersten Zeile den richtigen Wert und in der Spalte Warenausgang stimmen alle Werte! ;-)
In der Spalte Wareneingang setzt er in alle Zeilen den Wert aus der ersten Zeile, aber Warum? :(

anbei mal ein Bild von der Ausgabe.

Wo könnte denn hier noch der Fehler sein? Die Abfragen sind doch identisch.

Hier mal meine komplette Datei
PHP:
<?php
if(isset($_POST['bk_submit']))
{
$kunde = $_POST['kunde'];

$result = mysql_query("
SELECT we.id_kunde, we.id_artikel AS ein_artikel, we.id_warenart AS ein_warenart, we.datum AS ein_datum, wa.id_kunde, wa.id_artikel, wa.id_warenart, wa.datum AS aus_datum,
       (SELECT SUM(we.anzahl) FROM wareneingang we WHERE we.id_kunde = $kunde AND we.id_artikel = wa.id_artikel AND we.id_warenart = wa.id_warenart) ein_anzahl,
       (SELECT SUM(wa.anzahl) FROM warenausgang wa WHERE wa.id_kunde = $kunde AND wa.id_artikel = we.id_artikel AND wa.id_warenart = we.id_warenart) aus_anzahl
FROM wareneingang we, warenausgang wa
WHERE we.id_kunde = $kunde
GROUP BY we.id_kunde, we.id_artikel, we.id_warenart
")or die (mysql_error());

$arrartikel = array(); 
$arrwarenart = array();
$arrkunde = array();

$query1 = mysql_query("SELECT artikel FROM artikel");
while($row1 = mysql_fetch_array($query1))
{
   $arrartikel[] = $row1['artikel'];
}
$query2 = mysql_query("SELECT warenart FROM warenart");
while($row2 = mysql_fetch_array($query2))
{
   $arrwarenart[] = $row2['warenart'];
}
$query3 = mysql_query("SELECT kunde FROM kunde");
while($row3 = mysql_fetch_array($query3))
{
   $arrkunde[] = $row3['kunde'];
}

$arrartikel = array_values($arrartikel);
$arrartikel = array_combine(range(1, count($arrartikel)), array_values($arrartikel));
$arrwarenart = array_values($arrwarenart);
$arrwarenart = array_combine(range(1, count($arrwarenart)), array_values($arrwarenart));
$arrkunde = array_values($arrkunde);
$arrkunde = array_combine(range(1, count($arrkunde)), array_values($arrkunde));

echo "<h2>Bestandsliste für ".$arrkunde[$kunde]."</h2>";

//Tabellenbeginn
echo "<table border='0' cellspacing='1' cellpadding='2' bgcolor='#000000' width='730'>"; 
echo "<tr bgcolor='#DCE3F4'><td><b>Nr.</b></td><td><b>Bezeichnung</b></td><td><b>Warenart</b></td><td><b>Wareneingänge</b></td><td><b>Warenausgänge</b></td><td align='center'><b>Bestand</b></td><td align='center'><b>Letzter Zugriff<br>Eingang | Ausgang</b></td></tr>";

$nummer = 1;
// Beginn der Schleife
while ($row = mysql_fetch_assoc($result)) { 
	
	$bestand = $row['ein_anzahl'] - $row['aus_anzahl'];
	
    echo '<tr bgcolor="#EDF3F4">'
		.'<td>'.$nummer++.'</td>'
        .'<td>'.$arrartikel[$row['ein_artikel']].'</td>' 
        .'<td>'.$arrwarenart[$row['ein_warenart']].'</td>'
		.'<td>'.number_format($row['ein_anzahl'],0,',','.').'</td>'
		.'<td>'.number_format($row['aus_anzahl'],0,',','.').'</td>'
		.'<td align="right"><strong>'.number_format($bestand,0,',','.').'</strong></td>'
		.'<td align="center">'.date_mysql2german($row['ein_datum']).' | '.date_mysql2german($row['aus_datum']).'</td>' 
        .'</tr>' 
        ."\n";
} 
echo "</table>"; 
mysql_close(); 
}
?>
 

Anhänge

  • lager.png
    lager.png
    3,1 KB · Aufrufe: 103
Zuletzt bearbeitet von einem Moderator:
Zurück