31. maj 2002 - 12:30Der er
7 kommentarer og 1 løsning
Fordobler point...
Hej, jeg har lavet denne query:
SELECT users.username, users.billede, SUM(pix.point) AS pixpoint, SUM(source.point) AS sourcepoint, (SUM(source.point) + SUM(pix.point)) AS ialt FROM users LEFT JOIN pix ON users.username=pix.udgiver LEFT JOIN source ON users.username=source.udgiver GROUP BY users.username ORDER BY $sort DESC LIMIT $start$limit
Ideén er at hente alle brugere, tage der point fra tabellen pix, deres point fra tabellen source til sidst ligge dem samme og spytte det hele ud.
Det virker også fint indtil at en bruger har point i både pix og source, så begynder den at fordoble pointene. ?
Ikke noget forkert. Bare noget, der ikke lader sig gøre på den måde. Dine joins vil jo netop tage tingene med 2 eller flere gange. Du kommer ikke ud over at skulle gøre det af flere omgange, og samle resultaterne med PHP/ASP/JSP/Perl/C - eller hvad du nu bruger.
Det kan ikke rigtig lade sig gøre i en enkel query - ikke uden at lave en masse løkker uden om hinanden...
SELECT users.username, users.billede, SUM(userpix.point) AS pixpoint, SUM(usersrc.point) AS sourcepoint, (SUM(userpix.point) + SUM(usersrc.point)) AS ialt FROM users, users LEFT JOIN pix ON users.username=pix.udgiver userpix users LEFT JOIN source ON users.username=source.udgiver usersrc WHERE users.username = userpix.username AND users.username = usersrc.username GROUP BY users.username ORDER BY $sort DESC LIMIT $start$limit
Det tror jeg nok ville virke... har ikke testet, men prøv ad...
(Hvis mySQL nu understøttede sub-queries, så var det en smal sag
SELECT username, pixpoint, sourcepoint, (pixpoint+sourcepoint) ialt FROM users NATURAL JOIN ( SELECT users.username, SUM(pix.point) pixpoint FROM users LEFT JOIN pix ON users.username=pix.udgiver GROUP BY users.username ) NATURAL JOIN ( SELECT users.username, SUM(source.point) sourcepoint FROM users LEFT JOIN source ON users.username=source.udgiver GROUP BY users.username ) ORDER BY username;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.