Avatar billede lajer Nybegynder
31. maj 2002 - 12:30 Der 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. ?

Hvad gør jeg forkert her?
Avatar billede erikjacobsen Ekspert
31. maj 2002 - 13:25 #1
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.
Avatar billede barklund Nybegynder
31. maj 2002 - 13:53 #2
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;

...er da meget køn:o)
Avatar billede barklund Nybegynder
31. maj 2002 - 13:54 #3
Der mangler selvfølgelig et komma efter "userpix" i FROM... :o)
Avatar billede barklund Nybegynder
31. maj 2002 - 23:09 #4
Virker det?
Avatar billede barklund Nybegynder
06. juni 2002 - 18:28 #5
Hallo?
Avatar billede lajer Nybegynder
06. juni 2002 - 18:42 #6
yeps... smid et svar så for du point!
Avatar billede lajer Nybegynder
09. august 2002 - 19:52 #7
Hmm, nej forresten. Det hjalp ikke rigtigt!

Og det skal laves i en query, da den skal sorteres efter pointene ialt (bla).
Avatar billede lajer Nybegynder
16. september 2002 - 20:05 #8
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester