Avatar billede rille101 Nybegynder
05. februar 2007 - 22:08 Der er 13 kommentarer og
1 løsning

Count, nul skal også med

Hej.
har et debatforum, hvor der er en oversigt over oprettede debatter.
Har fået lavet en sql med count, der lister alle debatterne op, og så tæller hvor mange kommentarer der er kommet.
Debattrådene ligger i een tabel, og alle kommentarer ligger i en anden tabel.

Således ser min sql ud:
SELECT debatindlaeg.relation, Count(debatindlaeg.relation) AS Antal
FROM (brugere INNER JOIN debatemne ON brugere.brugernavn = debatemne.ansvarlig) INNER JOIN debatindlaeg ON debatemne.id = debatindlaeg.relation
WHERE (((debatemne.ansvarlig)=[brugere].[brugernavn]))  GROUP BY debatindlaeg.relation;

Mit problem er, at hvis antallet af kommentarer til en tråd er nul, så bliver denne ikke trukket med ud.

Hvordan fortæller jeg min SQL at den ikke skal ignorere poster med Antal = 0
Avatar billede fdata Forsker
05. februar 2007 - 22:17 #1
Ret INNER JOIN til LEFT JOIN
Avatar billede kjulius Novice
05. februar 2007 - 23:31 #2
Jo, men jeg tror bare ikke det er nok. Når du flytter debatindlæg ud på en LEFT OUTER JOIN, så bør GROUP BY også ændres til debatemne.id (det samme gælder så for SELECT delen). Til slut kan jeg ikke rigtigt se formålet med WHERE selektionen, da denne relation i forvejen står på ON delen af INNER JOIN.

Så mit forslag må lyde ca. sådan her:

SELECT debatemne.id, Count(debatindlaeg.relation) AS Antal
FROM (brugere
INNER JOIN debatemne ON brugere.brugernavn = debatemne.ansvarlig)
LEFT JOIN debatindlaeg ON debatemne.id = debatindlaeg.relation
GROUP BY debatemne.id;
Avatar billede Slettet bruger
06. februar 2007 - 09:02 #3
Hvis du skal have de debatindlæg med, som ikke er der!!! så skal du have debatemnet at gå ud fra, som kjulius også foreslår. Med den opstilling så kan du vel bruge nz, så det bliver noget i retning af:

SELECT debatemne.id, nz(count(debatindlaeg.relation),"0") AS Antal FROM osv!~)
Avatar billede rille101 Nybegynder
06. februar 2007 - 12:35 #4
Tak for de hurtige svar.
Det virker dog stadigvæk ikke.

Fdata og Kjulius, jeres resulterer ikke i fejl, men undlader stadig de ikke kommenterede indlæg.

spg, når jeg indsætter din select i stedet for det kjulius har skrevet, så får jeg fejlen:

Expected end of statement
RSantalsvar.Source = "SELECT debatemne.id, nz(count(debatindlaeg.relation),"0")
----------------------------------------------------------------------------^
Avatar billede rille101 Nybegynder
06. februar 2007 - 12:36 #5
Hov, pilen skulle pege på "0"
Avatar billede Slettet bruger
06. februar 2007 - 12:52 #6
Prøv noget i retningen af:

SELECT debatemne.id, nz(count(debatindlaeg.relation),'" & "0" & "')"

eller

SELECT debatemne.id, nz(count(debatindlaeg.relation),'0')
Avatar billede Slettet bruger
06. februar 2007 - 12:52 #7
eller

SELECT debatemne.id, nz(count(debatindlaeg.relation);"0")

osv!~)
Avatar billede Slettet bruger
06. februar 2007 - 13:01 #8
Faktisk så tror jeg det er:

SELECT debatemne.id, nz(count(debatindlaeg.relation);'" & "0" & "')"
Avatar billede rille101 Nybegynder
06. februar 2007 - 13:29 #9
Hmm. Har prøvet en masse forskellige ud fra det du har foreslået, men få div. fejl.
Den seneste fejl siger:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in query expression 'nz(count(osv, osv.....
Avatar billede kjulius Novice
06. februar 2007 - 21:39 #10
"Fdata og Kjulius, jeres resulterer ikke i fejl, men undlader stadig de ikke kommenterede indlæg."

Hvordan skal det forstås?

Vises de ikke-kommenterede debatemners id ikke? Debatemnets id burde blive vist, dog uden et tal for antallet af kommentarer.

Eller ønsker du selve debatemnet talt med?

I så fald burde det måske se sådan ud:

SELECT debatemne.id, Nz(Kommentarer, 0) + 1 AS [Indlæg]
FROM (brugere
INNER JOIN debatemne ON brugere.brugernavn = debatemne.ansvarlig)
LEFT JOIN [SELECT relation, COUNT(*) AS kommentarer FROM debatindlaeg GROUP BY relation]. AS tmp ON debatemne.id = tmp.relation;
Avatar billede rille101 Nybegynder
07. februar 2007 - 11:06 #11
DOH DOH DOH!!!!
Der lå sgu ens recordset på den side, blot med forskellige navne
Arbejdede selvfølgelig med den forkerte :-D

Men det er faktisk nok at bruge fdatas forslag. Nu skriver den (0 kommenterer) som den skal, i stedet for bare at undlade dem.

Så hvis der ikke er nogen indvendinger, går pointene til fdata...

Jeg er ked af at I skulle spilde unødvendig tid på min dumhed!
Avatar billede Slettet bruger
08. februar 2007 - 07:41 #12
Rolig, rolig!~)

Du har dog ikke fået givet points til fdata, endnu.... Husk at markere hans navn, når du accepterer svaret.
Avatar billede rille101 Nybegynder
08. februar 2007 - 09:36 #13
He he :-)
Så er det gjort.
Avatar billede fdata Forsker
08. februar 2007 - 19:32 #14
Så lykkedes det. Takker for point  ;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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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