Avatar billede weinreich Nybegynder
08. oktober 2007 - 22:09 Der er 9 kommentarer og
1 løsning

(For mig) Lettere kompliceret SQL-forespørgsel

Jeg har to tables til et forum jeg er ved at lave og jeg ville gerne have et samlet dataset med et bestemt udvalg af forums samt tal på hvor mange beskeder der er i forumet.

Table Forum:
id
navn

Table Post
id
er_original

Jeg vil gerne have et dataset der så siger mig:
forum.id, forum.navn, count(er_original = true) as OriginalCount, count(er_original = false) as AnswerToOrignalPosts
så jeg kan bruge det direkte i min repeater og kun skal spørge databasen en gang.

Jeg kan ikke rigtig få det på plads. Det tætteste jeg kommer er:

SELECT    forum.id, forum.navn, COUNT(post.er_original) AS postscount
FROM forum left join post on forum.id = post.forum_id
GROUP BY forum.id, forum.name, forumpost_is_op

men det giver mig to rækker pr. forum, en med count for true og en med caount for false...

Er der nogen der kan gøre de to linjer til en linje?

Takker
weinreich
Avatar billede erikjacobsen Ekspert
08. oktober 2007 - 22:12 #1
Hvis du fjerner:    , forumpost_is_op
Hvad så?
Avatar billede weinreich Nybegynder
08. oktober 2007 - 22:18 #2
Så får jeg en samlet kollone med tallet for hvor mange der er i alt... altså ikke delt op på om det er en original post eller ej
Avatar billede erikjacobsen Ekspert
08. oktober 2007 - 22:24 #3
Ok, men hvad betyder dit felt forumpost_is_op ?
Avatar billede weinreich Nybegynder
08. oktober 2007 - 22:27 #4
hov... ja det er en bit der siger om det er_original eller ej
Avatar billede weinreich Nybegynder
08. oktober 2007 - 22:28 #5
SELECT    forum.id, forum.navn, COUNT(post.er_original) AS postscount
FROM forum left join post on forum.id = post.forum_id
GROUP BY forum.id, forum.name, post.er_original

Sådan skulle den have set ud.. jeg havde bare lige forenklet min egen.
Avatar billede weinreich Nybegynder
08. oktober 2007 - 22:28 #6
bortset fra at jeg jo selvfølgelig ikke får det jeg gerne vil have.
Avatar billede erikjacobsen Ekspert
08. oktober 2007 - 22:35 #7
Ok, jeg skulle lige forstå ;)  Et par subselects kan gøre det. Dette er godt nok klippet fra mysql, og handler om noget helt andet, men det bør være det samme, når du får sat dine navne ind:

select vare as sss,(select count(*) from v where vare=sss and minantal=4),(select count(*) from v where vare=sss and minantal<>4) from v group by vare
Avatar billede weinreich Nybegynder
08. oktober 2007 - 22:44 #8
Perfeeeeekt... det var lige det jeg manglede... tak skal du have... hvis du vil have point så send et svar :)
Avatar billede erikjacobsen Ekspert
08. oktober 2007 - 22:46 #9
Jeg samler slet ikke på point, tak. Svar selv, accepter eget svar.
Avatar billede weinreich Nybegynder
08. oktober 2007 - 22:47 #10
takker :)
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