[MySQL] Rangnummers in resultaat?

Pagina: 1
Acties:

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Ben hier de afgelopen maanden al een paar keer tegen aan gelopen maar heb nog steeds geen oplossing gevonden :(

Stel ik wil een top-10 van iets uit m'n database trekken, hoe kan ik er dan een kolom bij fabriceren die aangeeft op welke 'plaats' dat item staat?

Als ik b.v. iets doe als:

SELECT username, user_posts FROM users ORDER BY user_posts DESC LIMIT 3

dan krijg ik iets als:
code:
1
2
3
4
5
6
7
+-----------+------------+
| username  | user_posts |
+-----------+------------+
| ACM    |    806 |
| Chem  |     433 |
| Wasigh    |     326 |
+-----------+------------+

Ik wil echter:
code:
1
2
3
4
5
6
7
+-----+-----------+------------+
| pos | username  | user_posts |
+-----+-----------+------------+
|   1 | ACM  |    806 |
|   2 | Chem    |     433 |
|   3 | Wasigh    |   326 |
+-----+-----------+------------+

Iemand een idee? Moet dus werken in MySQL.

En ja, ik weet dat je dat heeeeeeel makkelijk kan doen als je de resultaten uitpoept met PHP ofzo maar dat is hier dus geen optie ;)

Verwijderd

Je kan dit misschien doen met MATCH (X) AGAINST (Y)

Dit levert wel eens waar geen ID op (uniek geheel getal), maar wel een ranking dmv een getal tussen 0 en 1.

Voor meer info:

http://www.mysql.com/doc/F/u/Fulltext_Search.html

edit:

Focked, heb je geloof ik helemaal verkeerd begrepen.

  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Wat dacht je van sorteren, en dan een tellertje bijhouden als je de resultaten afdrukt ?

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op woensdag 10 oktober 2001 14:03 schreef little_soundman het volgende:
Wat dacht je van sorteren, en dan een tellertje bijhouden als je de resultaten afdrukt ?
Hij zegt net dat dat geen optie is.

Verwijderd

Kweenie of je met een while loop werkt anders gewoon boven de while loop zetten

$rank = 0;

en dan in de while loop

$rank++;

en dan $rank echo'en....

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Eeeh:
En ja, ik weet dat je dat heeeeeeel makkelijk kan doen als je de resultaten uitpoept met PHP ofzo maar dat is hier dus geen optie ;)
Het is moeilijker dan het lijkt hoor ;)

BTW MATCH is geen optie omdat er voor een hoop van die queries geen Fulltext index beschikbaar is en meestal gaat het om totalen of ratios waarop gesorteerd wordt.

  • dirkpostma
  • Registratie: Juni 2001
  • Laatst online: 10-05 16:53
mag ik vragen waarom uitpoepen in PHP geen optie is? Als het gaat om een Top 10 lijstje is het immers zo gebeurd...

Verwijderd

in Oracle kun je gebruik maken van de pseudo kolom rownum (let op order by)
ik weet niet of dit in mysql bestaat kan worden

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Die ROWNUM wordt toch toegewezen voor ORDER BY, of niet?

Maar ik heb het opgelost voor MySQL :) Nog maar wat dieper in de docs zitten graven.. Snap niet dat ik onderstaande niet eerder geprobeerd heb. Maar goed:

SET @i:=0
SELECT @i:=@i+1 as pos username, user_posts FROM users ORDER BY user_posts DESC LIMIT 3

Geeft:
code:
1
2
3
4
5
6
7
+-----+-----------+------------+
| pos | username  | user_posts |
+-----+-----------+------------+
|   1 | ACM  |    806 |
|   2 | Chem    |     433 |
|   3 | Wasigh    |   326 |
+-----+-----------+------------+

Toch bedankt allemaal :) Suf dat ik dit zelf niet meteen gevonden had |o

Verwijderd

Op woensdag 10 oktober 2001 14:47 schreef bartvb het volgende:
Die ROWNUM wordt toch toegewezen voor ORDER BY, of niet?
klopt, vandaar mijn opmerking erbij.
Dit is overigens wel op te lossen door van je select statement een inline view te maken (inclusief order by, dus 8i) en daarna rownum erbij te selecteren.

dus :
code:
1
select rownum, naam from tabelletje order by omschrijving

wordt
code:
1
2
select rownum, naam
from   (select naam from tabelletje order by omschrijving)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Is dat het aantal posts dat ik gedaan moet hebben??

volgens mij klopt je niet ;)
Op moment van schrijven is dat: 7906 (mja, het schijnt dat topix niet zo goed kan tellen als kees ;), want volgens topix zouden het er 7901 zijn ;) )
Pagina: 1