Avatar billede zac Nybegynder
07. oktober 2004 - 18:59 Der er 10 kommentarer og
1 løsning

Tælling af antal poster, COUNT og evt. GROUP BY?

Jeg vil gerne have antal tilmeldinger, og har forsøgt mig med:

$result = mysql_query("SELECT
COUNT(t.id_tilmeldinger) AS number, t.tilmeldings_tidspunkt,  t.id_hold,
h.id_hold
FROM tilmeldinger AS t, hold AS h
WHERE 
h.id_hold = t.id_hold
GROUP BY t.id_tilmeldinger
");

$row = mysql_fetch_array($result);

echo "Antal: " . $row['0'] . ". ";

Men den giver resultatet 1 - og uden GROUP BY melder den fejl. Vanskeligere end jeg troede at tælle! Hvad er der galt?
Avatar billede michael_stim Ekspert
07. oktober 2004 - 19:17 #1
FROM tilmeldinger t, hold h
Avatar billede michael_stim Ekspert
07. oktober 2004 - 19:18 #2
echo "Antal: " . $row['number'] . ". ";
Avatar billede zac Nybegynder
07. oktober 2004 - 19:23 #3
Det gør ingen forskel. Er $row['number'] ikke det samme (her) som $row['0']!?
- og er tilmeldinger AS t, hold AS h ikke mindst så korrekt som uden AS?
Avatar billede arne_v Ekspert
07. oktober 2004 - 19:25 #4
$result = mysql_query("SELECT
COUNT(t.id_tilmeldinger) AS number, t.tilmeldings_tidspunkt,  t.id_hold,
h.id_hold
FROM tilmeldinger AS t, hold AS h
WHERE
h.id_hold = t.id_hold
GROUP BY t.tilmeldings_tidspunkt,  t.id_hold
");
Avatar billede zac Nybegynder
07. oktober 2004 - 21:59 #5
Det virker heller ikke, resultatet er stadig 1, mens den her giver det rigtige antal (som er meget større):
$antal = mysql_result(mysql_query("SELECT COUNT(id_tilmeldinger) FROM tilmeldinger WHERE  tilmeldings_tidspunkt > '0308240000' "),0);

Jeg ville bare have hensynet til h.id_hold = t.id_hold med ind i optællingen (giver lidt færre), men kan som sagt ikke se, hvorfor både min oprindelige og forslaget fra arne v kun giver 1.
Avatar billede arne_v Ekspert
07. oktober 2004 - 22:11 #6
$result = mysql_query("SELECT
COUNT(t.id_tilmeldinger) AS number, t.tilmeldings_tidspunkt,  t.id_hold,
h.id_hold
FROM tilmeldinger AS t, hold AS h
WHERE
h.id_hold = t.id_hold
GROUP BY t.id_hold
");

måske ?
Avatar billede arne_v Ekspert
07. oktober 2004 - 22:12 #7
Men jeg har meget svært ved at gennemskue hvad du vil have ud af din query.
Avatar billede zac Nybegynder
07. oktober 2004 - 22:22 #8
Hvis man kun tæller på tilmeldinger kommer de frem, men der er slettet nogle hold efter tilmeldingerne er kommet, så h.id_hold = t.id_hold skal sikre, at der tælles kun på tilmeldinger til hold, som faktisk eksisterer nu!

Men desværre, dit sidste forslag giver også kun 1. Jeg må have læst på det med Group by...
Avatar billede zac Nybegynder
07. oktober 2004 - 22:50 #9
Hvorfor kan man ikke tælle på alt/* sådan her - den giver fejlmeddelelse:

$result = mysql_query("SELECT
COUNT(*), t.id_hold,
h.id_hold
FROM tilmeldinger AS t, hold AS h
WHERE
h.id_hold = t.id_hold
");
Avatar billede zac Nybegynder
07. oktober 2004 - 22:58 #10
Jeg kan se, jeg skal ind og læse på join ift. group by...
Avatar billede zac Nybegynder
17. oktober 2004 - 23:04 #11
men fik aldrig løst det...
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