Avatar billede flamme Nybegynder
05. december 2001 - 11:37 Der er 12 kommentarer og
1 løsning

Kan ikke få count til at virke

Jeg har lidt problemer med count, hvordan for jeg dether til at virke?
SELECT k_forum.*, count(k_post.pid) as cnt from kod_forum as k_forum, kod_forumpost as k_post where k_forum.id=k_post.pid
Avatar billede nordclc Nybegynder
05. december 2001 - 11:43 #1
Prøv med:

select f.*, count(p.pid) as antal
from kod_forum f, kod_forumpost p
where f.id = p.pid
Avatar billede nordclc Nybegynder
05. december 2001 - 11:47 #2
Hov, jeg tror ikke det kan lade sig gøre sådan! For count er jo en gruppe funktion!
Avatar billede flamme Nybegynder
05. december 2001 - 11:48 #3
den siger
MySQL returnerede: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
Avatar billede nordclc Nybegynder
05. december 2001 - 11:49 #4
Det betyder, at du rent faktisk er nødt til at skrive det på følgende måde:

select f.felt1, f.felt2, count(p.pid) as antal
from kod_forum f, kod_forumpost p
where f.id = p.pid
group by f.felt1, f.felt2
Avatar billede nordclc Nybegynder
05. december 2001 - 11:50 #5
Så du er altså nødt til at skrive alle feltnavnene istedet for f.* fordi man ikke i group by kan skriv f.*

Jeg håber du frostår hvad jeg mener!
Avatar billede nordclc Nybegynder
05. december 2001 - 11:50 #6
frostår = forstår ;o)
Avatar billede nordclc Nybegynder
05. december 2001 - 12:28 #7
flamme>> Har du fået det til at virke?
Avatar billede flamme Nybegynder
05. december 2001 - 13:30 #8
både og
select f.id, f.forumnavn, f.beskrivelse , count(p.pid) as antal
from kod_forum f, kod_forumpost p
where f.id = p.pid
group by f.id, f.forumnavn, f.beskrivelse

Det ser sådan ud nu og det virker næsten som det skal, men hvis der er en linje i kod_forum hvis id ikke passer til en pid i kod_forumpost (f.id = p.pid) kommer der ikke noget ud for dem. Fik du den?
Avatar billede nordclc Nybegynder
05. december 2001 - 13:35 #9
Så skal du bruge outer join, som jeg ikke rigtig ved hvordan man laver i MySQL, men prøv evt. at se her:

tabel1 INNER JOIN tabel2 on <betingelse>
fjerner en sammenkobling, hvis betingelsen ikke er opfyldt. Det betyder at rækken i tabel1 ikke kommer med i det endelige resultat

tabel1 LEFT JOIN tabel2 on <betingelse>
beholder rækken fra tabel1, selvom betingelsen ikke er opfyldt. Alle felter udtrukket fra tabel2 udfyldes med NULL værdier.

tabel1 RIGHT JOIN tabel2 on <betingelse>
fungerer som LEFT JOIN, blot er det tabel2, som er den betydende tabel (altså den der beholdes, mens felterne i tabel1 udfyldes med NULL)



Avatar billede nordclc Nybegynder
05. december 2001 - 13:36 #10
Dvs du skal bruger tabel1 LEFT JOIN tabel2 on <betingelse>, og ikke outer join som jeg skrev før!
Avatar billede nordclc Nybegynder
05. december 2001 - 13:40 #11
Måske sådan her:

select kod_forum.id, kod_forum.forumnavn, kod_forum.beskrivelse , count(kod_forumpost.pid) as antal
from (kod_forum LEFT JOIN kod_forumpost ON kod_forum.id = kod_forumpost.pid)
group by kod_forum.id, kod_forum.forumnavn, kod_forum.beskrivelse
Avatar billede flamme Nybegynder
05. december 2001 - 13:44 #12
der var den tak :)
Avatar billede nordclc Nybegynder
05. december 2001 - 13:45 #13
Selv tak ;o)
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