PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche mal bei Left Join Hilfe



snowcat
07.05.2009, 20:47
Wie bekomme ich es hin, dass statt X der zugehörige Wert aus der Spalte COUNT(p.uid) genutzt wird? Der Rest passt soweit. Muss nun nurnoch diese kleine Sache überwinden.


SELECT e. * , COUNT(p.uid) AS X, u.max_pm, u.min_verdienst
FROM `vms_emaildaten` AS e
LEFT JOIN `vms_userdaten` AS u ON e.uid = u.uid
LEFT JOIN `vms_paidmails_empfaenger` AS p ON e.uid = p.uid
WHERE ( e.freigabe_fuer = '3' OR e.freigabe_fuer = '2' ) AND u.min_verdienst <= '10' AND X <= u.max_pm
GROUP BY e.uidDabei gibt es folgenden Fehler:

#1054 - Unknown column 'X' in 'where clause'Wenn ich aber statt dem X einen Wert eingebe, funktioniert es. Ich will aber, dass die beiden Werte COUNT(p.uid) und u.max_pm mit einander verglichen werden sollen.

Lösungsvorschläge?

Lieben Gruß
Ralf

Sebmaster
07.05.2009, 20:50
Lösungsvorschläge?

In der WHERE Klausel hat MySQL noch keine Spalten selected, und hat somit X noch nicht zur Verfügung. X könntest du erst in einer HAVING-Klausel verwendne, aber in die WHERE-Klausel kannst du ja einfach statt X gleich COUNT(p.uid) nehmen:thumb:

snowcat
07.05.2009, 20:58
SELECT e. * , COUNT( p.uid ) AS X, u.max_pm, u.min_verdienst
FROM `vms_emaildaten` AS e
LEFT JOIN `vms_userdaten` AS u ON e.uid = u.uid
LEFT JOIN `vms_paidmails_empfaenger` AS p ON e.uid = p.uid
WHERE (e.freigabe_fuer = '3'
OR e.freigabe_fuer = '2'
)
AND u.min_verdienst <= '10'
AND COUNT( p.uid ) <= u.max_pm
GROUP BY e.uiddabei kommt dann folgender Fehler:

#1111 - Invalid use of group function Wie genau funktioniert das mit der HAVING-Klausel. Weil ich fast glaube, dass es so nicht so recht funktionieren will.

EDIT: So, hab das mit dem HAVING rausbekommen. Damit geht es problemlos.
Danke Sebmaster für den Hinweis.


SELECT e. * , COUNT( p.uid ) AS X, u.max_pm, u.min_verdienst
FROM `vms_emaildaten` AS e
LEFT JOIN `vms_userdaten` AS u ON e.uid = u.uid
LEFT JOIN `vms_paidmails_empfaenger` AS p ON e.uid = p.uid
WHERE (e.freigabe_fuer = '3'
OR e.freigabe_fuer = '2'
)
AND u.min_verdienst <= '10'
GROUP BY e.uid
HAVING COUNT( p.uid ) <= u.max_pm

tampulin
09.05.2009, 17:43