PHP gevorderde |
|
Ik heb een website waarbij leden mensen kunnen doorsturen in de hoop dat deze lid worden.
Nu wil ik een top50 maken met mensen die de meeste mensen lid maken.
Ieder lid heeft een unieke 'referrallink', wanneer mensen naar deze link gaan en daarna aanmelden worden ze referral van die persoon.
Ik heb nu om dat bij te kunnen houden een aparte tabel gemaakt met de volgende structuur:
id,
userID,
referrer,
datum
userID is hierbij de naam van het nieuwe lid en referrer daar staat de naam in van degene die hem/haar heeft doorgestuurd.
De query voor het sorteren van deze lijst heb ik uiteindelijk wel gevonden en werkt goed, zie hieronder:
<?php
$query = "SELECT
referrer,
COUNT(*) AS counter
FROM
referrals
GROUP BY
referrer
ORDER BY
counter DESC
LIMIT 50";
?>
<?php $query = "SELECT referrer, COUNT(*) AS counter FROM referrals GROUP BY referrer ORDER BY counter DESC LIMIT 50"; ?>
Nu alleen het tweede probleem, om oneerlijke resultaten te voorkomen als er mensen zijn met dezelfde aantallen dacht ik om ook tevens te kijken naar het aantal mensen wat hij/zij heeft doorgestuurd.
Ik heb dus een scriptje gemaakt dat wanneer iemand de site via zo'n link bezoekt dat er dan een record wordt opgeslagen in de database.
Ik heb hiervoor een aparte tabel gemaakt met de volgende structuur:
id,
referrer,
ip,
herkomst,
datum
Met de combinatie referrer en ip voorkom ik dat er mensen dubbel geteld worden, en dus ook ingevoegd.
referrer staat weer voor degene die hem/haar heeft doorgestuurd, userID komt hier niet voor omdat diegene (nog) geen lid wordt, en je dus geen gebruikersnaam weet en herkomst, daar staat de http_referer in, maar heeft voor de query geen betekenis.
Nu zou ik dus graag willen dat de huidige query zodusdanig aangepast wordt, dat de tweede order by parameter afhangt van hoe vaak die referrer in deze tabel voorkomt.
Ik denk dat het met een subquery zal moeten, maar hoe precies weet ik ook niet.
Ik hoop dat de situatie een beetje duidelijk is.
|