Toon posts:

[MySQL 4.1.2] Aantal rows tellen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste mede-tweakers,

Ik heb een tabel top2000[topyear,rank,band,song,songyear] met daarin de top2000 (zoals elk jaar uitgezonden door radio 2) lijsten van 1999 t/m 2003. Nu wil ik weten hoeveel stijgers er in 2003 zijn (t.o.v. 2002).
Een lijst van de stijgers krijg ik door:

code:
1
2
3
4
5
6
7
SELECT *
FROM top2000 as A
WHERE topyear = 2003
HAVING A.rank < all (SELECT B.rank
                                  FROM top2000 as B
                                  WHERE B.topyear=2002 AND A.song=B.song AND A.band=B.band
                                 )


Het lukt mij echter niet om het aantal rijen dat teruggegeven wordt door MySQL te laten tellen ik heb SELECT count(*) geprobeerd, maar dan krijg ik: "Unknown column 'A.rank' in 'scalar IN/ALL/ANY subquery'"; probeer ik SELECT *,count(topyear) dan krijg ik "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause". Als ik dan een GROUP BY topyear toevoeg (topyear is door de WHERE topyear=2003 overal gelijk) dan krijg ik "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY topyear FROM top2000 as A WHERE topyear = 2003".

iemand?

groeten,

Martin

Verwijderd

Bij je laatste fout staat je groupby boven je from, deze moet onder je where clause.

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Je plaatst het GROUP BY statement op de verkeerde plek in de query, daarom krijg je een syntax foutmelding.
Ook zou een HAVING statement niet mogen zonder een GROUP BY statement.

There's no place like 127.0.0.1


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

Doet iets met Cloud (MS/IBM)


Verwijderd

Als je query eenmaal correct werkt heb je misschien ook iets aan http://nl2.php.net/manual/en/function.msql-num-rows.php

Verwijderd

Topicstarter
Bedankt voor al jullie tips. Ik heb de GROUP BY onder de WHERE gezet. Ik kreeg uiteindelijk wel een werkende query, maar hij deed niet wat ik wil :-)

Uiteindelijk is dit hem geworden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
          SELECT count(*)
          FROM (
             SELECT *
         FROM top2000 as A
         WHERE topyear = 2003
         HAVING rank < all (SELECT B.rank
                            FROM top2000 as B
                WHERE B.topyear = 2002 AND A.song=B.song AND A.band=B.band
                                 )
      ) AS name
      WHERE topyear <> 1900
      GROUP BY topyear;
Pagina: 1