Hallo Rolf,
tut mir leid, heute kommen meine Antworten stückweise - sozusagen immer dann, wenn ich wieder eine habe 😉
Du schreibst, es könnte mehrere Zahlungseingänge zu einer Rechnung geben. Was hat es denn dann mit der Spalte ze.bezahlt auf sich? Hier kommt wieder der GROUP BY Konflikt ins Spiel. Wenn es 3 Zahlungseingänge gibt und nicht alle den gleichen Wert für "bezahlt" haben - welcher dieser Werte gehört dann ins Ergebnis? Was sagt "bezahlt" bei den Zahlungseingängen überhaupt aus?
Im Grunde ist die Spalte "bezahlt" in der Zahlungseinganstabelle nicht korrekt. Die gehört ansich in die Rechnungentabelle. Nun steht sie aber in der Zahlungseingangstabelle. Sie bedeutet einfach nur, ob mit dem Zahlungseingang die RG restlos bezahlt ist. Ist das der Fall, steht eine 1 drin, ist das nicht der Fall, steht eine 0 drin.
Bei der Datev kann man es mit einem Subselect lösen. Schreibe statt
da.ListenID
einfach dies in die Spaltenliste des SELECT - ähnlich wie bei den Bruttozahlungen:(SELECT ListenID FROM daten_belege WHERE belegID=r.rechnungenID LIMIT 1) AS ListenID,
Ok, habe ich gemacht.
Wenn Du nur noch Einzelsätze hinzujoinst, sollte sich der GROUP BY erledigt haben. Dafür muss allerdings zuerst geklärt werden, wie mit der Spalte ze.bezahlt bei mehreren Zahlungseingängen umzugehen ist.
Naja, eigentlich benötige ich nur die Info, ob wenigstens 1 x eine 1 in der Spalte steht. Normalerweise sollte auch die Eingabe neuer Zahlungen gesperrt sein, sobald in dieser Spalte eine 1 steht. Insofern könnte man also auch sagen, dass nur der Wert der höchsten ID, zugehörig zur jeweiligen RechnunhgsID für die Spalte "bezahlt" relevant ist. Denn steht dort eine 0, ist die RG noch unbezahlt, steht dort eine 1, ist sie bezahlt.
Die Eindeutigkeit kannst Du dann im phpMyAdmin validieren, indem Du zwischen GROUP BY Klausel und ORDER BY Klausel ein
HAVING COUNT(*) > 1
einfügst. Natürlich nicht in der PHP Anwendung. Die HAVING-Klausel ist sozusagen ein zusätzliches WHERE, das nach dem GROUP BY ausgeführt wird. Der Gezeigte HAVING liefert Dir alle Rechnungsnummern, für die es vor dem GROUP BY mehr als einen Satz gab.
Ja, verstehe.
Jörg