gar nicht in der having klausel, wir haben ja auch kein group by mehr. das problem bei dir und dem group by ist, dass du im prinzip zwei group by miteinander über die joins verschatechlt hast, nämlich die summen der bezahlten banner und die summen der angezeigten banner. beides hat die partnerid. und wenn du danach gruppierst, dann verfälschen sich die beiden tabellen gegenseitig. wenn du nur eines von beiden angezeigt haben willst, dann würde group by wunderbar funktionieren. wir bauen das nun in die where klausel ein.
Jap so sieht es aus als wenn es funktioniert. Zumindest habe ich jetzt das Ergebnis, welches ich erwarte. Was ich noch hinzugefügt habe ist " AND r3.typ='1'" weil ich ansonsten die Summe aller bezahlten Banner(Views und Klciks) erhalte. Hier die aktuelle Version , die ich gleih im PHP-Script testen werde :)
SELECT p.id, p.domain, (
SELECT COUNT( * )
FROM p_rechnung r2
WHERE p.id = r2.partner_id
) AS Anzahl, (
SELECT SUM( r3.anzahl )
FROM p_rechnung r3
WHERE p.id = r3.partner_id AND r3.typ='1'
) AS Summe_Rechnungen, (
SELECT SUM( v.views )
FROM p_view v
WHERE p.id = v.partner_id
) AS Summe_Views
FROM partners p
WHERE p.id
IN (
SELECT r.partner_id
FROM p_rechnung r
WHERE p.id = r.partner_id
AND r.status = '1'
AND r.typ = '1'
)
AND (
SELECT SUM( r3.anzahl )
FROM p_rechnung r3
WHERE p.id = r3.partner_id
AND r3.typ = '1'
) > (
SELECT SUM( v.views )
FROM p_view v
WHERE p.id = v.partner_id )
ORDER BY RAND()
LIMIT 1
eventuell kannst du bei mysql den teil mit den aliasnamen ersetzen, bin mir da aber nicht sicher, also den letzten teil:
AND Summe_Rechnungen > Summe_Views
Geht leider nicht... Fehlermeldung: Kennt die Spalte Summe_Rechnungen nicht. Naja...
Wie sieht das perfomancemäßig bei den Unterabfragen aus? Hätte nie gedacht, dass die so kompliziert werden wird...
Ansonsten danke dass du dich mit meinem speziellen Problem beschäftigt hast. Etwas gelernt habe ich auf jeden FAll. Danke