[php] Top tien vinden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met een klein probleempje. Ik heb een scriptje waarmee ik de top 2 surfers van me site wil kunnen vinden. Nu werkt het nog niet helemaal na behoren, en ik zou graag wat advies willen hoe ik het mogelijk kan maken.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
include('dbconnect2.inc.php');

$result  = mysql_query('SELECT id, gebruikersnaam, s_rpunten, s_posts, f_posts, pvt FROM gebruikers ORDER by id ASC LIMIT 10');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))

{

$rp = floor($row['s_rpunten'] * 2);
$sp = $row['s_posts'];
$fp = floor($row['f_posts'] / 2);
$tp = floor($row['pvt'] / 100);
$pt = $sp+$fp+$tp+$rp;

echo ''.$row['gebruikersnaam'].' - '.$pt.'<br>';

}

?>


Dit is het nu. Het totaal aantal punten van de user staan niet in de database, maar die moeten dus nog berekent worden met de rekensom in het scriptje. $pt is het totaal aantal punten. Omdat het berekenen van de punten in de in de query gebeurt, is het ordenen niet echt mogelijk, althans ik weet niet hoe :(

Ik zit nu al boven de 7000 users, en alleen een top 10 hoeft er maar uit te rollen, niet alle 7000.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18-09 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Wat is er op tegen om de meest actuele stand ook in de database op te slaan, en deze door middel van een cronjob bij te werken?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:41
For-loopje erna :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja, dat kan natuurlijk wel. Maar hoopte eigenlijk op een makelijkere manier.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe kun je dan de top 10 eruit halen ?

Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
SQL:
1
2
3
4
SELECT id, gebruikersnaam, (s_posts + FLOOR(f_posts / 2) + FLOOR(pvt / 100) + FLOOR(s_rpunten * 2)) AS punten
FROM gebruikers
ORDER BY punten ASC
LIMIT 10

zoiets :?

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18-09 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 23 juli 2003 @ 12:53:
Ja, dat kan natuurlijk wel. Maar hoopte eigenlijk op een makelijkere manier.
Op een of andere manier zegt een klein stemmetje in me hoofd me dat het niet zo snel gaat om 7000 users uit een database te halen, de stand te berekenen in PHP, vervolgens de boel te sorteren en de bovenste 10 te laten zien.

MAar wat heeft die PHP puntenberekening er mee te maken? :?

[ Voor 8% gewijzigd door gorgi_19 op 23-07-2003 12:55 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Apollo_Futurae schreef op 23 July 2003 @ 12:54:
SQL:
1
2
3
4
SELECT id, gebruikersnaam, (s_posts + FLOOR(f_posts / 2) + FLOOR(pvt / 100) + FLOOR(s_rpunten * 2)) AS punten
FROM gebruikers
ORDER BY punten ASC
LIMIT 10

zoiets :?
cheers mate!

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 19:03
PHP:
1
mysql_fetch_array($result, MYSQL_ASSOC)
Kun je trouwens ook vervangen door:
PHP:
1
mysql_fetch_assoc($result)

Acties:
  • 0 Henk 'm!

  • js303
  • Registratie: April 2003
  • Laatst online: 01-06 10:17
ik had ooit een keer een query nodig om een top 10 van alle sessions weer te geven. dat ging zo:
code:
1
2
3
4
5
SELECT stat_ip, count(stat_ip) AS stat_sessions
FROM bb_webstats
GROUP BY stat_ip
ORDER BY stat_sessions DESC
LIMIT 0,10


wellicht kan je zo'n soort query opstellen?

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom de limit 10?
je kan toch moeilijk een stand berekenen van die 10 en daarna een top10 uithalen? ik denk dat je ze allemaal moet uithalen en dan een top10 samenstellen, niet met een limit werken
of je moet de top10 in de query zelf laten berekenen, dan kan je wel met limit werken
Xcuse me if i'm wrong

[ Voor 18% gewijzigd door Verwijderd op 23-07-2003 18:48 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

De order is toch om de top-volgorde te bepalen :?
Dan is de limit 10 een handige methode om niet te veel data op te halen :)

Acties:
  • 0 Henk 'm!

  • js303
  • Registratie: April 2003
  • Laatst online: 01-06 10:17
Verwijderd schreef op 23 juli 2003 @ 18:47:
Waarom de limit 10?
je kan toch moeilijk een stand berekenen van die 10 en daarna een top10 uithalen? ik denk dat je ze allemaal moet uithalen en dan een top10 samenstellen, niet met een limit werken
of je moet de top10 in de query zelf laten berekenen, dan kan je wel met limit werken
Xcuse me if i'm wrong
ik weet niet op welke post jij reageert, maar mijn query genereert gewoon een top10 van de sessies diens IP adres het vaakst voorkomen. als ik de limit weghaal krijg je gewoon alles, met het meest voorkomende IP adres bovenaan.

volgens mij kan je deze methode ook gebruiken om die top2 samen te stellen.
Pagina: 1