Avatar billede clscableguy Praktikant
15. juni 2004 - 09:39 Der er 12 kommentarer og
1 løsning

Count tæller forkert, men hvorfor?

Hej

Jeg har denne sætning, men jeg får den viser 1 for meget:

Select Count(*) as antal, t_counter.id, t_counter.titel from t_counter LEFT JOIN t_counterdata ON t_counter.id=t_counterdata.counterid group by id order by titel
Avatar billede clscableguy Praktikant
15. juni 2004 - 09:52 #1
Mine tabeller ser sådan da her ud:

t_counter:
id
titel

t_counterdata
id
counterid ( ref til t_counter.id )

Det jeg skal bruge er titel fra t_counter + hvor mange hits der er på den counter fra t_counterdata
Avatar billede Slettet bruger
19. juni 2004 - 21:50 #2
Hvis du bare skal bruge titel og hits, kan du ikke nøjedes med:

--------------------
SELECT Count(*) AS antal, t_counter.titel
FROM t_counter LEFT JOIN t_counterdata ON t_counter.id=t_counterdata.counterid
GROUP BY t_counter.id
ORDER BY titel;
--------------------
Avatar billede clscableguy Praktikant
19. juni 2004 - 22:05 #3
Har prøvet, og den viser stadigvæk 1 hit på de 2 titel'er som ikke har noget i t_counterdata.

Har løst problemet med dette her:
Select Count(*) as antal, t_counter.id, t_counter.titel, t_counterdata.counterid from t_counter LEFT JOIN t_counterdata ON t_counter.id=t_counterdata.counterid group by id order by titel
også checker jeg på om t_counterdata.counterid er større end 0
Avatar billede Slettet bruger
19. juni 2004 - 22:44 #4
ok, prøv med:

---------------
SELECT Count(*) AS antal, t_counter.id, t_counter.titel
FROM t_counter, t_counterdata
WHERE t_counter.id=t_counterdata.counterid
GROUP BY id
ORDER BY titel;
---------------

Den burde kun tælle hits på de t_counter.id der også forekommer i t_counterdata.
Avatar billede clscableguy Praktikant
20. juni 2004 - 07:40 #5
ja det gør den også, men mit problem er at jeg skal have en fuld liste af alle titel'er i t_counter og så deres hit. Med den SQL sætning får jeg kun dem som har et hit.
Avatar billede Slettet bruger
21. juni 2004 - 19:52 #6
Gider du smide noget test data op ?
Bare et 5-6 rækker fra hver tabel.
Avatar billede clscableguy Praktikant
22. juni 2004 - 10:21 #7
t_counter
id titel
1  Forside
2  Billeder
3  Nyheder

t_counterdata
id ipadr counterid
1  0    1
2  0    1
3  0    1
4  0    2
5  0    1
6  0    1
Avatar billede clscableguy Praktikant
22. juni 2004 - 10:22 #8
Jeg har også sat et ekstra felt på som hedder firma, så det skulle også være muligt at sætte en where firma='navn' på. Vil godt give flere point hvis det er.
Avatar billede Slettet bruger
22. juni 2004 - 22:41 #9
Prøv med denne her:

------------------------
SELECT titel, IF(counterid <> 'NULL', COUNT(*), 0) as hits
FROM t_counter LEFT JOIN t_counterdata
    ON t_counter.id = t_counterdata.counterid
GROUP BY titel
ORDER BY t_counter.id;
------------------------
Avatar billede clscableguy Praktikant
23. juni 2004 - 08:39 #10
den virker :)

Læg et svar og du for point.

Men hvis nu jeg laver et felt der hedder t_counter.firma, hvordan laver jeg så det samme men med where firma='firmanavn1'

Så jeg kun får en liste over dem som firmanavn1 har lavet?
Kan godt give flere point, hvis det er. :)
Avatar billede Slettet bruger
23. juni 2004 - 08:51 #11
Jeg har ikke lige mulighed for at teste det før iaften, men prøv med:

------------------------
SELECT titel, IF(counterid <> 'NULL', COUNT(*), 0) as hits
FROM t_counter LEFT JOIN t_counterdata
    ON t_counter.id = t_counterdata.counterid
WHERE t_counter.firma = 'firmanavn1'
GROUP BY titel
ORDER BY t_counter.id;
------------------------
Avatar billede clscableguy Praktikant
23. juni 2004 - 08:59 #12
Det virker :)
Avatar billede Slettet bruger
23. juni 2004 - 09:03 #13
Det var heldigt :-)
Tak for point.
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