Avatar billede jakobdo Ekspert
23. oktober 2008 - 12:43 Der er 8 kommentarer og
1 løsning

Tæl antal i en række

Hej,
jeg kender godt funktionen: COUNT()
Men hvis jeg har:

en række med:

felt1 = 1
felt2 = null
felt3 = data
felt4 = null
felt5 = data
felt6 = null

Så vil jeg gerne have en SQL som kan give mig noget ala:

SELECT COUNT(where field = null) FROM tabel WHERE felt1 = 1
Og svaret skal jo så være 3, da der er 3 felter som har NULL stående i datafeltet.
Avatar billede jakobdo Ekspert
23. oktober 2008 - 13:48 #1
Følgende kode i php giver mig ønskede resultat:

$query = mysql_query("SELECT * FROM `tabel` WHERE `id` = 1 LIMIT 1");
if(myqsl_num_rows($query)==1){
    $antal = 0;
    foreach($row = mysql_fetch_row($query) AS $data){
        if($data != '0' && empty($data))
            $antal++;
    }
}
echo 'Antal NULLer : ' . $antal;
Avatar billede arne_v Ekspert
23. oktober 2008 - 22:21 #2
Prøv:

SELECT COUNT(*)-COUNT(felt) FROM tabel WHERE andetfelt=X

COUNT(*) bør tælle alle rækker mens COUNT(felt) kun bør tælle de række rhvor felt er
forskellig fra NULL
Avatar billede jakobdo Ekspert
24. oktober 2008 - 08:07 #3
Hej Arne, jeg tror desværre COUNT(*) stadig kun vil give 1.
Og hvad mener du med COUNT(felt) ?
Avatar billede arne_v Ekspert
24. oktober 2008 - 14:37 #4
Hvis du har en tabel med:

f1  f2
1    NULL
2    177
3    NULL
4    233

saa vil COUNT(*) give 4 mens COUNT(f2) vil give 2.

Men jeg har nu laest spoergsmaalet igen. Du vil counte vandret fremfor lodret ikke ? Det
kan du ikke goere med COUNT.

I saa fald haenger du paa en banal:

SELECT IF(f1 IS NULL,1,0)+IF(f2 IS NULL,1,0)+...+IF(f6 IS NULL,1,0) FROM tabel WHERE ...
Avatar billede jakobdo Ekspert
24. oktober 2008 - 15:53 #5
Ahh, ja du har ret...
Men min udfordring er som følger:

f1 f2  f3  f4 f5
1  NULL NULL 2  NULL

Altså 1 række, hvor jeg vil tælle felter som er NULL.
Avatar billede arne_v Ekspert
24. oktober 2008 - 16:11 #6
Saa er du noedt til at bruge den sidste SQL jeg outlinede
Avatar billede jakobdo Ekspert
24. oktober 2008 - 16:34 #7
Og det er ikke en option.
Jeg har 40 felter! :o)

Så jeg tror jeg nøjes med min php løsning.
Det virker.

Hvis du vil have point for dig løsning, så smid et svar.
Avatar billede arne_v Ekspert
24. oktober 2008 - 16:48 #8
Og hvorfor er det et problem at bruge den metode paa 40 felter ?

Du betaler vel ikke efter laengden af SQL !

Og et svar.
Avatar billede jakobdo Ekspert
24. oktober 2008 - 17:01 #9
Det er ikke et problem, men der skal skrives for meget kode...
Dovenskaben længe leve.
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