Moin
LEFT JOIN ist schon mal der falsche ansatz, es handelt sich um einen INNER JOIN. eine rechnung mit keiner position macht auf mich irgendwie keinen sinn. ich bin habe aber auch vom kaufmännischen her keine ahnung. ;-)
Auf dem ersten Blick gebe ich Dir recht, aber bei dieser Abfrage wird die postion nicht benötigt.
Ich war gerade auch schon dabei ob mein left join falsch sei.
Nur verstehe ich den Unterschied zwischen INNER und OUTER JOIN nicht ganz?
der zweite punkt ist der, dass du Aggregtfunktionen und GROUP BY benutzt. auch wenn mysql keinen syntaktischen fehler ausgibt, sollte man immer die regel im auge behalten, dass du bei GROUP BY immer nur die spalten mit anzeigen läßt, nach denen du auch gruppiert hast oder eben aggregatfunktionen. deswegen muss man sich für die angaben der spalten, die nicht gruppiert wurde, etwas einfallen lassen.
»»
Es sollen bei mir die Preise gruppiert werden und daraus die Summe berechnet werden und die anderen Felder werde normal ausgegeben.
Habe ich das in meinen Code nicht richtig geschrieben?
es geht mit unterabfragen, aber ich schlage dir einfach mal vor, es in zwei abfragen aufzuteilen, keep it simple. die entscheidene wäre dann....
»»
was meinst du mit 2 Abfrage? 2 MySQL Abfragen über PHP ? Das wollte ich eigentlich vermeiden ich möchte es irgendwie in MySQL hinbekommen.
SELECT r.bestell_nr, sum(p.preis)
FROM rechnung r, position p
WHERE r.bestell_nr = p.bestell_nr
AND r.bestell_nr = 'wert'
GROUP BY r.bestell_nr
ORDER BY bestell_nr ASC;
So wie Du es gemacht hast funktioniert es auch nicht. Für mich ist es einfach zu verstehen ohne Alias zu arbeiten aber bei sum(PREIS) summe muss ein alias stehen sonst funktioniert es nicht. Das habe ich bereits herausgefunden. Und ORDER BY bestell_nr ASC brauche ich nicht weil es eh nur eine Ausgabe gibt, weil es auch nur eine Bestellnummer gibt.
Außerdem macht Dein Code gar kein Sinn ich habe gar kein Bezug zu kunde und position. Da ist meine Lösung schon näher dran als Deine.
Der Fehler wird im Join Verfahren stecken wo ich noch nicht weiß welcher der richtige ist, bzw ich versteh das nicht.
position
BESTELL_NR | PREIS | [...]
--------------------------
1 | 1.19 | [...]
1 | 2.34 | [...]
1 | 6.47 | [...]
rechnung
BESTELL_NR | KD_NR | [...]
--------------------------
1 | 123 | [...]
3 | 184 | [...]
11 | 123 | [...]
kunde
KD_NR | KD_ANREDE | [...]
---------------------------------
123 | Herr | [...]
184 | Frau | [...]
114 | Dr. | [...]
SELECT kunde.KD_ANREDE, kunde.KD_VORNAME, kunde.KD_NACHNAME , sum(PREIS) summe, rechnung.BESTELL_DATUM, rechnung.STATUS
FROM
rechnung
LEFT JOIN kunde ON rechnung.KD_NR = kunde.KD_NR
LEFT JOIN position ON rechnung.Bestell_NR = position.Bestell_NR
WHERE
BESTELL_NR = '$bestell_nr'
GROUP BY BESTELL_NR