Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[MySql] Ranking toevoegen aan resultaat

LabRat
3 antwoorden
  • Hoe voeg ik een "ranking" toe aan het resultaat van een query die een top 'zoveel' creeert van b.v. het meest aantal getelde namen? Ik heb al zitten zoeken, en kwam wel termen tegen als ranking() over, en row-number(). Maar dat werkt allemaal niet op mij MySql query. Ik krijg de ene foutmelding na de andere. (Of wellicht doe ik iets verkeerd?)

    Ik heb een query die netjes een top 15 samenstelt van de 15 meest voorkomende namen in een tabel, maar deze voegt geen ranking toe:

    SELECT comment_author AS name, COUNT(*) AS amount FROM comments GROUP BY name ORDER BY amount DESC LIMIT 0, 15;

    Deze query werkt prima. Resultaat: <name>, <amount>

    B.V.:
    Bob, 45
    Harry, 23
    John, 12
    Stephen, 8
    etc.


    Maar wat ik wil is dat er ook een ranking aan worrdt toegekend: <name>, <amount>, <ranking>
    B.V.:

    Bob, 45, 1
    Harry, 23, 2
    John, 12, 3
    Stephen, 8, 4
    etc.

    Is dat mogelijk?
  • Hier staat wel wat, maar zo te zien kost dat bij een grote database nogal wat tijd. Verder zie je vaak dat mensen het met 2 tabellen doen. De ranking wordt als het ware 'gecached' in een tweede tabel (rankings).
    Ik weet niet of je de resultaten met een scripttaal verwerkt, maar anders zou je de ranking daar natuurlijk kunnen verwerken als je een ORDER BY hanteert.

    Ik vond ook dit nog. Daar hebben ze nogal werk gemaakt van ranking queries :P
  • @LabRat: Tnx!
    Zelf heb ik dit nog gevonden:
    [code:1:c8a05e6f80]
    SET @rank=0;
    SELECT @rank:=@rank+1 AS rank, comment_author AS name, COUNT(*) AS amount
    FROM comments
    GROUP BY comment_author ORDER BY amount DESC LIMIT 0, 15;
    [/code:1:c8a05e6f80]
    Die doet het ook. probleem is alleen dat ik het (inderdaad) via PHP verwerk, en tot op heden krijg ik foutmeldingen als ik deze query middels 'while ($row = mysql_fetch_array($result))' probeer te lezen.
    Maar dat kan ook aan mij liggen, ik ga er nog verder mee.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.