Avatar billede ostehamster Nybegynder
07. november 2005 - 17:42 Der er 9 kommentarer og
1 løsning

Problmer med LEFT JOIN og NULL, (sortering)

Hejsa

Jeg har et problem med LEFT JOIN og NULL. På en hjemmeside med opskrifter vil jeg gerne hente alle opskrifter, og sortere dem efter deres karakter. Karakteren bliver beregnet udfra en sum og antal af rækker i en anden tabel:

SELECT opskrifter.id as opskriftsid, opskrifter.titel as optitel, (sum(karaktertabel.karakter)/count(karaktertabel.karakter)) as karakter, count(karaktertabel.karakter) as antalstemmer FROM opskrifter
LEFT JOIN opskrifter_karakter as karaktertabel ON opskrifter.id = karaktertabel.opskrift
WHERE opskrifter.godkendt = '1'
GROUP BY opskrifter.id, karaktertabel.opskrift ORDER BY 'karakter' DESC, 'antalstemmer' DESC

Problem er, på nogle MySQL server, at hvis der ikke er givet en karakter, så bliver karakter sat til NULL, vil jeg tror, og når den så sortere, kommer alle række med NULL til at stå over dem med tal, lige meget om den sortere med ASC eller DESC.

Hvordan klare jeg lige den? Evt. så den retunere 0 istedet for NULL?

På forhånd tak
Christoffer
Avatar billede bromer Nybegynder
07. november 2005 - 17:49 #1
SELECT opskrifter.id as opskriftsid, opskrifter.titel as optitel, IFNULL((sum(karaktertabel.karakter)/count(karaktertabel.karakter)),0) as karakter, count(karaktertabel.karakter) as antalstemmer FROM opskrifter
LEFT JOIN opskrifter_karakter as karaktertabel ON opskrifter.id = karaktertabel.opskrift
WHERE opskrifter.godkendt = '1'
GROUP BY opskrifter.id, karaktertabel.opskrift ORDER BY 'karakter' DESC, 'antalstemmer' DESC
Avatar billede bromer Nybegynder
07. november 2005 - 17:50 #2
Det jeg har gjort er at smide en IFNULL(<her regner du din karakter ud>,0) ind i din select.
Avatar billede bromer Nybegynder
07. november 2005 - 17:50 #3
Og du kan læse om IFNULL og de andre venner på http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html
Avatar billede ostehamster Nybegynder
07. november 2005 - 17:52 #4
Snedigt :) Jeg var selv ude i noget med IF, THEN, END, men det kunne jeg ikke lige magte :)

Takker mange gange
Avatar billede bromer Nybegynder
07. november 2005 - 17:53 #5
Jamen det var så lidt. Tak for point :)
Avatar billede ostehamster Nybegynder
07. november 2005 - 17:54 #6
Er der nogen måde at finde ud af for hvilke servere det virker, og hvilke det ikke virker. (Altså uden brug af IFNULL)
Avatar billede bromer Nybegynder
07. november 2005 - 18:06 #7
Jeg forstår ikke helt hvad du mener! Du vil teste om IFNULL virker?
Avatar billede ostehamster Nybegynder
07. november 2005 - 18:40 #8
Det var omkring hvornår det er nødvendigt at bruge IFNULL. På min ene mysql server (4.1.12) kan den godt sortere rigtigt uden brug af IFNULL, mens på min anden, version 3.2.x, kan jeg ikke.

Er der nogen standard for, hvad den skal gøre med NULL, når den skal sortere sammen med tal
Avatar billede bromer Nybegynder
07. november 2005 - 18:45 #9
Jeg kan ikke huske, hvad standarden siger, men der er nogle DBMS'er, hvor du kan sige at du vil have NULL i toppen eller bunden. I MySQL kan du altid styre det manuelt via IFNULL, og det ville jeg nok gøre hvis jeg var dig. Har ikke den store tiltro til MySQL :)
Avatar billede ostehamster Nybegynder
07. november 2005 - 18:47 #10
Det vil jeg så huske fremover :)
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