Avatar billede thomic Nybegynder
25. april 2007 - 10:49 Der er 8 kommentarer og
1 løsning

Tælle alle forekomster af tal i udvalgte fields i SQL table

Hej.

jeg har en sql-tabel ved navn "tdc_navn" med flg. fields:

tdc_id, tdc_title, tdc_1, tdc_2, tdc_3 og tdc_4

i de sidste fire har jeg jeg en række tal, som jeg gerne vil tælle. Det samme tæl kan sagtens forekomme i både tdc_1 de andre (f.eks. tdc_3) i samme række.
Jeg vil dog kun tælle forekomster i de 4 fields - ikke de to første fields.
Derefetr skal den opstille talene sorteret efter havd der er flest af. sådan her:

Der er 4 forekomster af tallet 55
Der er 2 forekomster af tallet 6

Jeg har forsøgt mig med noget count, men det vil ikke rigtig, som jeg vil - den tæller ikke rigtigt - som om den kun tæller i et et af de 4 fields - eller at den ikke tæller det som 2, hvis der er to forekomster i samme række.

Håber I forstår, hvad jeg mener - Ser frem til jeres svar.
Avatar billede thomic Nybegynder
25. april 2007 - 10:58 #1
Hov, nu når jeg tænker over det, så hørte det hrr vel egentlig bedre til under SQl databaser.
Forhåbentlig, er der en venlig sjæl, der kan hjælpe mig alligevel, da det trods alt skal printes ud i PHP.
Avatar billede jakobdo Ekspert
25. april 2007 - 11:54 #2
Du skal kigge på noget GROUP BY. Dog har jeg stadig ikke styr på din tabel opbygning! :o)
Avatar billede thomic Nybegynder
25. april 2007 - 15:20 #3
Hehe, men så prøv at se bort fra min tabel, og bare forestil dig at man har flg info:

id    num1    num2
123451    4    3
123452    2    2   
123453    4    6   
123454    2    4   
123455    4    4   
   

Der skal ses på både num1 og num2 - da formålet med disse er det samme.

Hvordan får jeg den til at printe flg. ud:

4 går igen 5 gange
2 går igen 3 gange
6 går igen 1 gange
3 går igen 1 gange

Den skal altså counte i num1 og num2 - men ikke id - jeg ville godt selv kunne det, hvis det bare var num1, den skulle tælle, men ved ikke hvordan jeg får den til at tælle i begge to på en gang.
Avatar billede jakobdo Ekspert
25. april 2007 - 16:44 #4
Jeg kan ikke lige lure hvordan det skal laves i en sql.
Men man kan ihf lave det på følgende måde:

$total = array();
$query1 = mysql_query("SELECT num1 AS key, COUNT( id ) AS value FROM table_name GROUP BY num1");
if(mysql_num_rows($query1)>0)
{
    while($row1 = mysql_fetch_assoc($query1))
    {
        $total[$row1['key']] = $row1['value'];
    }
}

$query2 = mysql_query("SELECT num2 AS key, COUNT( id ) AS value FROM table_name GROUP BY num2");
if(mysql_num_rows($query2)>0)
{
    while($row2 = mysql_fetch_assoc($query2))
    {
        if(array_key_exists($row2['key'],$total))
        {
            $total[$row2['key']] += $row2['value'];
        }
        else
        {
            $total[$row2['key']] = $row2['value'];
        }
    }
}

echo '<pre>';
print_r($total);
echo '</pre>';
Avatar billede thomic Nybegynder
25. april 2007 - 18:17 #5
Tak for svaret :-) Jeg er dog ikke meget for at lave så mange connections til databasen, da jeg jo har 9 fields, som der skal tælles i.
Jeg tror jeg vil prøve at spørge ovre i database-forummet, hvilket jeg naturligvis skulle have gjort fra starten.

Men tak for din hjælp, igen, igen - bare smid svar :-)
Avatar billede jakobdo Ekspert
25. april 2007 - 18:22 #6
Du må gerne få et svar, men synes dog ikke mit svar er alle point værdige!
Hvis du får et svar i mysql kategorien, må du gerne smide svaret her, så jeg kan se hvordan det evt. kan laves.
Avatar billede jakobdo Ekspert
25. april 2007 - 18:51 #7
Jeg siger mange tak for point, selvom det ikke var 200 værd.
Avatar billede thomic Nybegynder
25. april 2007 - 18:55 #8
Hehe det skal du ikke tænke på - du har generelt været en stor hjælp - ja faktisk den eneste hjælp, såa t du får lidt ekstra point gør ikke mig noget.

Men måske kan du som bonus-svar for de 200 svare mig på, hvorfor mit spg. i MySQL-forummet ikke er vist i listen men kun ude i sidepanelet?

http://www.eksperten.dk/spm/Databaser/MySQL/
"COUNT alle forekomster i hele tabellen pånær 2 fields"
Avatar billede thomic Nybegynder
25. april 2007 - 19:08 #9
Nå nu kom den frem på listen :-)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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