Faddin: Kniffliges Problem - LEFT JOIN

Beitrag lesen

Hallo,

ich bastele und probiere an einer MySQL-Abfrage nun 2 Tage rum und komme zu keinen zufriedenstellenden Ergebnis.

Struktur:

[quote]
mysql> SELECT * FROM partners;
+----+--------------------+-------------+-----------------+----------------------------------+-------+------+
| id | domain             | pw          | email           | session                          | klick | view |
+----+--------------------+-------------+-----------------+----------------------------------+-------+------+
|  1 | domain.de           | domain | info@domain.de   | NULL                             | 1     | 1    |
|  2 | domain2.de | domain2      | info@domain2.de | b1c1f05c320f508d10053058c3497b83 | 1     | 1    |
+----+--------------------+-------------+-----------------+----------------------------------+-------+------+

mysql> SELECT * FROM p_rechnung;
+----+------------+--------+--------+------------+----------------------------------+-----+
| id | partner_id | anzahl | status | zeit       | link                             | typ |
+----+------------+--------+--------+------------+----------------------------------+-----+
|  1 |          1 |   1000 | 1      | 1108685695 | domain-200701-1000klick           | 0   |
|  4 |          2 | 100000 | 1      | 1169138570 | domain2-200701-10000      | 1   |
|  5 |          2 |     50 | 1      | 1169564199 | domain2-200701-50klick    | 0   |
|  6 |          2 | 200000 | 1      | 1169813082 | domain2-200701-200000view | 1   |
+----+------------+--------+--------+------------+----------------------------------+-----+

mysql> SELECT * FROM p_view;
+----+------------+-------+------+--------+
| id | partner_id | monat | jahr | views  |
+----+------------+-------+------+--------+
|  4 |          2 | 1     | 2007 | 268743 |
|  5 |          2 | 2     | 2007 | 277775 |
+----+------------+-------+------+--------+

[/quote]

Meine derzeitige Abfrage:

  
SELECT p.id, p.domain, r.link, COUNT( r.anzahl ), SUM(COALESCE(v.views)), SUM( r.anzahl )  
FROM partners p  
INNER JOIN p_rechnung r ON p.id=r.partner_id  
INNER JOIN p_view v ON p.id=v.partner_id  
WHERE r.status = '1'  
AND r.typ = '1'  
GROUP BY p.id  
HAVING SUM( r.anzahl ) > SUM(COALESCE(v.views))/COUNT( r.anzahl )  
ORDER BY RAND()  
LIMIT 1  

Was ich möchte:

Eine Zufalls-ID bei der die Rechnungen bezahlt wurden.
In p_rechnung werden Rechnungen gespeichert, mit ANzahl der freien Klicks bzw. Bannerimpressionen. r.tatus 1 entspricht bezahlt und kann eingeblendet werden. r.typ 1 bedeutet dass Bannereinblendungen also keine Bannerklicks bezahlt wurden.

Ist bisschen verwirrend aber sollte gehen.

Das Problem ist halt, dass COUNT( r.anzahl ) die Anzahl aller Rechnungen ausgibt und nicht eines bestimmten Partners. GEnau so ist es bei den SUM().

SOlltet ihr Verständnisfragen haben, könnt ihr diese gerne Stellen.