login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Hoeveelste resultaat

Offline Joel - 13/06/2005 00:45 (laatste wijziging 13/06/2005 01:00)
Avatar van JoelEigenaar Hey

Ik zou nu bij de statistieken bij de leden iets zoals dit willen maken:

-1900 Forumreacties
-1,35% van het totaal aantal forumreacties
-13de plaats

Nu mijn vraag is, hoe kan ik die "13de plaats" berekenen? Met welke SQL functie? Of is er geen SQL functie voor?

Gegeven: Aantal forumreacties: 50286

Tabel ziet er zo uit:

http://www.sitemasters.be/forum_tabel.JPG

10 antwoorden

Gesponsorde links
Offline Metalhead - 13/06/2005 10:35 (laatste wijziging 13/06/2005 10:40)
Avatar van Metalhead HTML gevorderde SELECT COUNT(*) FROM leden
WHERE reacties >= $aantalReacties SORT BY reacties

en dan krijg je automatisch de plek toch?

edit; o, ik zie net dat je de database wat anders ingericht hebt dan ik had verwacht...

Met deze db-structuur moet je dus eerst berekenen hoeveel berichten elke user heeft gepost, en daarna moet je ze met php op volgorde zetten en dan berekenen welke plek je in dat resultaat bent... (wordt een beetje een langzame berekening verwacht ik )
Offline Joel - 13/06/2005 12:16
Avatar van Joel Eigenaar Kan je niet met een SQL query van elk uniek userid (DISTINCT) het aantal results weergeven dmv count? En dan sorteren op Count(id).

Zou er zo uit moeten zien:

Userid Count(id)
===============
13 | 2450
16 | 2234
11 | 2124
12 | 1984

En dan ...
Offline MechaVore - 13/06/2005 12:22 (laatste wijziging 13/06/2005 12:23)
Avatar van MechaVore Gouden medaille

PHP gevorderde
Hmm, het kan wel als je het aantal reacties van een gebruiker in de database opslaat. Het kost inderdaad veel ruimte maar dan is het simpelweg zo:
  1. <?
  2. $sql = mysql_query("SELECT id,gebruikersnaam FROM leden ORDER BY aantalforumberichten DESC")or die(mysql_error());
  3. $i = 1;
  4. while ($assoc=mysql_fetch_assoc($sql))
  5. {
  6. if ($assoc['id']==$_SESSION['jouwid'])
  7. {
  8. echo $i.". ".$assoc['gebruikersnaam'];
  9. }
  10. $i++;
  11. }
  12. ?>
En die reacties zou je nog in de database kunnen zetten met een for lus die alles nagaat en update in je leden tabel. 
Offline Joel - 13/06/2005 12:25
Avatar van Joel Eigenaar Er bestaat geen kolom "aantalforumberichten", dat is niet databasevriendelijk btw Die moeten dus eerst van iedereen geteld worden, zie men vorige reactie.
Offline MechaVore - 13/06/2005 12:29 (laatste wijziging 13/06/2005 12:30)
Avatar van MechaVore Gouden medaille

PHP gevorderde
  1. <?
  2. $sql = mysql_query("SELECT id FROM leden")or die(mysql_error());
  3. $num = mysql_num_rows($sql);
  4. while ($assoc = mysql_fetch_assoc($sql))
  5. {
  6. $query = mysql_query("SELECT id FROM forumreplys WHERE id = '".$_SESSION['jouwid']."'")or die(mysql_error());
  7. $aantal = mysql_num_rows($sql);
  8. $update = mysql_query("UPDATE leden SET aantalreacties='".$aantal."' WHERE id = '".$_SESSION['jouwid']."'")or die(mysql_error());
  9. echo $assoc['id']." Done";
  10. }
  11. ?>
Dit moet je een keer starten, maar eerst moet je dan bij postreacties.php enzo aantal reactie met een verhogen, net zoals je nu met punten waarschijnlijk al doet .. Maar het zal zeker de snelste manier niet zijn 
Offline Legolas - 13/06/2005 12:34 (laatste wijziging 13/06/2005 12:35)
Avatar van Legolas Onbekend Toch denk ik met meerdere queries...

  1. <?php
  2. $query1 = mysql_query("SELECT id,gebruikersnaam FROM leden") or die(mysql_error());
  3. $forumpostersarray = array();
  4. $i = 0;
  5. while($lid = mysql_fetch_row($query1)){
  6. $forumquery1 = mysql_query("SELECT COUNT(id) FROM forumreplys WHERE poster = '".$lid[1]."'") or die(mysql_error());
  7. $forumquery2 = mysql_result($forumquery1,0);
  8. $forumpostersarray[$i]['user'] = $lid[1];
  9. $forumpostersarray[$i]['posts'] = $forumquery2;
  10. $i++;
  11. }
  12. // nu kan je de array forumpostersarray dus sorteren op de key posts en dan echoën
  13. ?>

Duidelijk?
Offline xSc - 13/06/2005 12:41
Avatar van xSc Onbekend Misschien kun je de berekening 1x per dag laten uitvoeren. Dat zie je vaak bij stats-systemen. Neem bijv. AWstats, die werkt het 1x per dag bij tenzij je op 'Nu verversen' klikt.
Offline nemesiskoen - 13/06/2005 12:46
Avatar van nemesiskoen Gouden medaille

PHP expert
legolas. Je weet toch dat dat 2300 queries voor 1 pagina is.

Beter zoals Henri zegt via cron jobs of op zen minst met JOINS.
Offline prorsoft - 13/06/2005 13:24
Avatar van prorsoft PHP gevorderde mss zou je het kunnen doen met nested queries...
Offline Gerard - 13/06/2005 14:28 (laatste wijziging 13/06/2005 14:59)
Avatar van Gerard Ouwe rakker Mijn persoonlijke voorkeur zou uitgaan naar de manier welke Henri ook al aandraagt: cron jobs.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.194s