Avatar billede hcthorsen Praktikant
09. december 2009 - 21:18 Der er 4 kommentarer og
1 løsning

Problemer med WHERE clause, der skal kunne ignoreres med alder <= IFNULL($alder,alder)

Nedenstående søgestreng symboliserer mit problem:

SELECT * FROM erfaring WHERE alder <= IFNULL($alder,alder)

alder <= IFNULL($alder,alder) bruges til at ignore denne clause hvis $alder er NULL. $alder kommer fra en select-box ($_POST[alder]). Det fungerer altså på den måde, at hvis man ikke vælger en alder i select-boxen, så sættes der ikke nogen begrænsning på alder i søgningen. Det hele har virket perfekt hidtil.

Nu er der imidlertid opstået problemer. Jeg har af andre årsager modificeret min database, så feltet alder har fået ændret sin nulværdi til NULL, hvilket den ikke har været tidligere. Det bevirker, at alle rækker hvori alder = NULL nu ikke længere kommer med ved ovenstående søgning.

Håber der er nogen der forstår mit problem:-)
Avatar billede arne_v Ekspert
09. december 2009 - 21:20 #1
proev:

SELECT * FROM erfaring WHERE alder <= IFNULL($alder,alder) OR alder IS NULL
Avatar billede hcthorsen Praktikant
09. december 2009 - 21:40 #2
Det løser jo ikke mit problem. Jeg får rigtigt nok alle rækker med når jeg får et NULL fra select-boxen, men når nu $alder fx. er 15, så vil jeg jo kun have dem der er <= 15 og ikke også dem for hvem feltet ikke er udfyldt. Jeg forstår slet ikke hvorfra problemet kommer, for hvis der kommer et NULL fra select-boxen, så burde min søgning vel blot svare til

SELECT * FROM erfaring WHERE alder <= alder

eller hvad. Du må jo vide det, for det er dig der rodet mig ud i denne løsning:-)
Avatar billede arne_v Ekspert
09. december 2009 - 21:57 #3
ah - nu ser jeg problemet

proev:

SELECT * FROM erfaring WHERE IFNULL(alder,0) <= IFNULL($alder,IFNULL(alder,0))

det burde give:

$alder    alder              betingelse
NULL      NULL                TRUE
NULL      not NULL            TRUE
not NULL  NULL                TRUE
not NULL  not NULL            alder <= $alder
Avatar billede hcthorsen Praktikant
09. december 2009 - 22:29 #4
OK, det virker faktisk. Jeg troede nu ikke det var nødvendigt med så "langhåret" en løsning.

Jeg har ændret i min database fordi jeg har brug for at kunne skelne mellem 0 og NULL. I min database kan man godt være 0 år, men det skal jeg kunne skelne fra de tilfælde hvor der ikke er nogen oplysninger. Jeg troede ikke det ville føre så mange problemer med sig.

Nå, sender du et svar. For øvrigt, tusind tak for hjælpen!!
Avatar billede arne_v Ekspert
09. december 2009 - 22:44 #5
NULL er beregnet til manglende oplysninger og er lavet netop for at undgaa problemer med at aegte data kan faa en vaerdi, saa du har valgt det rigtige.

Og den query er ikke saa slem igen.

Og et svar.
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