Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP & MySQL] ranking op posts (https://forum.scholieren.com/showthread.php?t=156205)

pietdepiet 11-07-2002 19:36

ik heb nu dit:
PHP-code:

<? 
$rank = 1;
$query2 = "SELECT * FROM members ORDER BY posts DESC LIMIT 10"; 

$resultaat2 = mysql_query($query2); 
while ($record = mysql_fetch_object($resultaat2)) { 
echo "$rank | $record->user | $record->posts<br>\n";
$rank++ 


echo "<br>" 

$query3 = "SELECT * FROM members WHERE posts > $posts - 20 AND posts < $posts + 20 ORDER BY posts ASC"; 

$resultaat3 = mysql_query($query3); 
while ($record1 = mysql_fetch_object($resultaat3)) { 
echo "$record1->user | $record1->posts<br>\n"; 

?>

dit zou dus de top 10 mensen met meeste posts moeten selecteren en de 40 mensen rond jou, alleen ik heb 2 problemen
1: hoe zet ik ervoor hoeveelste de persoon is, bij de 40 personen rond jou (iets met SELECT count(*) AS aantal FROM members WHERE... ofzo??)
2: als iemand in de top 30 staat ziet hij 2 keer de personen in de top 10

hoe los ik dit op?

(het gaat niet om de lay-out)

eddie 11-07-2002 20:04

1: Is er geen mogelijkheid om het rec_id op te vragen ofzo? Of je houdt een tellertje bij, en vergelijkt de user uit te database met de persoon die is ingelogd
2: Wat bedoel je?

Cool_D 11-07-2002 20:04

:confused: Ik snap echt nog nix van PHP :D

pietdepiet 11-07-2002 20:07

Citaat:

eddie schreef:
1:
PHP-code:

$query3*=*"SELECT***FROM*members*WHERE*posts*BETWEEN $posts*-*20*AND*$posts*+*20*ORDER*BY*posts*ASC";

$resultaat3*=*mysql_query($query3);*
$teller 
1;
while*($record1*=*mysql_fetch_object($resultaat3))*{*
echo*
"$teller$record1->user*|*$record1->posts<br>\n";*
$teller 
$teller 1;
}


2: Wat bedoel je?

:confused:

ik bedoelde dus dat als bijv iemand 600ste staat en hij op ranks dit ziet:

1 bla
2 bla
3 bla
..
10 bla

580 bla
581 bla
582 bla
583 bla
584 bla
..
600 de persoon in kwestie
..
619 bla
620 bla

eddie 11-07-2002 20:13

Citaat:

pietdepiet schreef:
:confused:

ik bedoelde dus dat als bijv iemand 600ste staat en hij op ranks dit ziet:

Moet je eerst weten welke persoon dat is en hoeveel posts die heeft, en dat in je select statement kenbaar maken:
PHP-code:

$query4*=*"SELECT posts FROM members WHERE user = $user";*
$resultaat4*
=*mysql_query($query4);
$record4*=*mysql_fetch_object($resultaat4)*

$query3*
=*"SELECT***FROM*members*WHERE*posts*>*$record4->posts*-*20*AND*posts*<*$record4->$posts*+*20*ORDER*BY*posts*ASC";


pietdepiet 11-07-2002 20:16

Citaat:

eddie schreef:

Moet je eerst weten welke persoon dat is en hoeveel posts die heeft, en dat in je select statement kenbaar maken:

jaja, dat heb ik eerder in het script al gedaan (de persoon logt in), maar hoe krijg ik dan zijn rank ervoor

eddie 11-07-2002 20:22

Citaat:

pietdepiet schreef:
jaja, dat heb ik eerder in het script al gedaan (de persoon logt in), maar hoe krijg ik dan zijn rank ervoor
Hoe het in PHP moet weet ik niet, maar ik zal je even de FoxPro code geven :D :p
Code:

SET ORDER TO posts IN members
LOCATE FOR user = cUser IN members
nRank = RECNO( "members" )

met set order to wordt de volgorde aangegeven hoe de tabel wordt gesorteerd.
locate for is een instructie die de record-pointer verschuift naar het goede record. Met RECNO() kan het recordnummer (en dus de rank) worden opgevraagd.

Maar hoe dit in PHP moet...

pietdepiet 11-07-2002 20:25

hmmm, FoxPro ken ik niet :(

eddie 11-07-2002 20:28

[omslachtige manier]
- selecteer de gehele user in een nieuwe tabel, gesorteerd op posts
- loop de nieuwe tabel door en houdt een tellertje bij totdat je bij de juiste persoon bent
[/omslachtige manier]

pietdepiet 11-07-2002 20:31

Citaat:

eddie schreef:
[omslachtige manier]
- selecteer de gehele user in een nieuwe tabel, gesorteerd op posts
- loop de nieuwe tabel door en houdt een tellertje bij totdat je bij de juiste persoon bent
[/omslachtige manier]

tja maar dat is een beetje sloom, vooral als je veel members hebt

eddie 11-07-2002 21:44

ja, maar zolang je geen andere manier hebt...

Jon 11-07-2002 22:09

1: Ranking voor een user met een bepaald aantal posts kun je oplossen door te tellen hoeveel personen meer posts hebben en dan plus 1 (de user zelf), dus: SELECT COUNT(*)+1 FROM members WHERE posts > $postaantalvanuser.

2: Filteren op user doe je met GROUP BY username.


Alle tijden zijn GMT +1. Het is nu 09:25.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.