Ilja: Left Join und Order By

Beitrag lesen

yo,

SELECT COUNT(u.UID) as rows, u.username, u.UID, p.PID
FROM user AS u
LEFT JOIN pictures AS p ON (u.UID = p.UID)
WHERE u.status = 1
GROUP BY u.UID
ORDER BY u.UID DESC

auch diese query ohne * ist falsch. mysql geht da einen dummen weg und gibt leider keine fehlermeldung aus. aber ich rate dir jede spalte, die keine aggregat-funktion ist mit in die group by klausel reinzunehmen, dann bist du immer auf der sicheren seite.

Mhhh, ich glaube ich versteh was du mir sagen willst. Wenn ich jetzt richtig verstanden habe kann ich die Abfrage so wie ich Sie benötige garnicht in einer Query absetzen, weil ich eine 1:n Beziehung habe ?

fast, du kannst sie schon in einer query absetzen (je nach dbms und version), aber nicht so wie du es gemacht hast.

so wie es aussieht, kann deine version von mysql unterabfragen, und dann geht es auch mit einer abfrage. eigentlich brauchst du in deinem fale den GROUP BY nur für die Count () Aggregatfunktion. du kannst entweder diese einfach weglassen und dann den LEFT JOIN abschicken.

SELECT u.username, u.UID, p.PID
FROM user AS u
LEFT JOIN pictures AS p ON (u.UID = p.UID)
WHERE u.status = 1
ORDER BY u.UID DESC, p.UID DESC

oder aber du machst es mit unterabfragen, falls du den COUNT() auf jeden fall mit ins boot nehmen willst. ist ein wenig "unschön", da es sich um eine korrelierende abfrage handelt.

SELECT (SELECT COUNT(*) FROM pictures AS p2 WHERE p2.UID = p.UID)
AS rows, u.username, u.UID, p.PID
FROM user AS u
LEFT JOIN pictures AS p ON (u.UID = p.UID)
WHERE u.status = 1
ORDER BY u.UID DESC, p.UID DESC

Ilja