Left Join keine Ergebnisse
Gerd H.
- datenbank
1 Frank (no reg)0 Gerd H.0 Vinzenz Mai0 Gerd H.
0 Gerd H.
Hallo Forengemeinde,
Es geht um ein kleines Script, welches mir die Anzahl an Klicks anzeigt. Die Klicks sollen nur angezeigt werden, wenn diese in einer Rechnung begkichen wurden. Ich beschäftige mich nun seit längerem mit einer Abfrage:
SELECT p.id, p.domain
FROM partners p
LEFT JOIN p_rechnung r ON p.id=r.partner_id
LEFT JOIN p_klick k ON k.partner_id=r.partner_id
WHERE r.status = '1'
AND r.typ = '0'
GROUP BY p.id
HAVING SUM( r.anzahl ) > SUM( k.klicks )
ORDER BY RAND()
LIMIT 1
Jedoch erhalte ich keine Ergebnisse, wenn in der Tabelle p_klick keine Datensätze sind. Am Anfang sollen allerdings auch keine sein. Diese sollen erst beim ersten Klick angelegt werden.
Wäre toll, wenn mir jemand einen Denkanstoß oder eine Hilfe gibt.
Hallo,
nur mal ganz dumm nachgefragt, wozu "ORDER BY RAND()" und "LIMIT 1"? Willst du wirklich nur einen einzigen zufälligen anzeigen?
Als generellen Rat möchte ich dir mitgeben, wenn du ein Problem mit einer SQL Abfrage hast (eben z.b. keine Ergebnisse) dann vereinfache erstmal deine Abfrage rückwärts bis du wieder Ergebnisse bekommst und gehe dann wieder schrittweise vorwärts bei den Einschränkungen (WHERE und HAVING) und lasse unwesentliche Dinge wie Sortierung oder Limitierung erstmal weg, das lenkt nur ab. :)
Vielleicht solltest auch du mögliche Nullwerte in p_klick durch 0 ersetzen und diese dann summieren.
Ciao, Frank
nur mal ganz dumm nachgefragt, wozu "ORDER BY RAND()" und "LIMIT 1"? Willst du wirklich nur einen einzigen zufälligen anzeigen?
Weil mir bei der Abfrage genau ein zufälliger Datensatz angezeigt werden soll. Es wrid am Ende ja auf der Seite auch nur genau ein Banner eingebunden.
Vielleicht solltest auch du mögliche Nullwerte in p_klick durch 0 ersetzen und diese dann summieren.
In einer Abfrage? Es ist ja auch so, dass ein Nullwert herauskommt...das weiß ich, aber wir ersetze ich durch 0? Habe davon noch ncihts gelesen.
Hallo
Vielleicht solltest auch du mögliche Nullwerte in p_klick durch 0 ersetzen und diese dann summieren.
In einer Abfrage? Es ist ja auch so, dass ein Nullwert herauskommt...das weiß ich, aber wir ersetze ich durch 0? Habe davon noch ncihts gelesen.
Du verwendest mit hoher Wahrscheinlichkeit MySQL, da jedes andere mir bekannte Datenbankmanagementsystem Dein Statement als syntaktisch falsch zurückweisen würde. Aber auch MySQL kennt COALESCE:
Nullwerte im Feld feldname kannst Du somit mit
... COALESCE(feldname, 0) ...
durch 0 ersetzen.
Freundliche Grüße
Vinzenz
Nullwerte im Feld feldname kannst Du somit mit
... COALESCE(feldname, 0) ...durch 0 ersetzen.
Ich danke dir, das ist wonach ich gesucht habe.
In einer Abfrage? Es ist ja auch so, dass ein Nullwert herauskommt...das weiß ich, aber wir ersetze ich durch 0? Habe davon noch ncihts gelesen.
Ok jetzt habe ich etwas davon gelesen...das was gemeint war, ist wohl NVL(spalte,0). Funktioniert leider bei mir nicht...
SELECT p.id, p.domain
FROM partners p
LEFT JOIN p_rechnung r ON p.id=r.partner_id
LEFT JOIN p_klick k ON k.partner_id=r.partner_id
WHERE r.status = '1'
AND r.typ = '0'
GROUP BY p.id
HAVING SUM( r.anzahl ) > SUM(NVL(k.klicks,0))
ORDER BY RAND()
LIMIT 1