login  Naam:   Wachtwoord: 
Registreer je!
 Forum

top50 (Opgelost)

Offline Stefan14 - 31/12/2007 13:54 (laatste wijziging 31/12/2007 13:55)
Avatar van Stefan14PHP 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:
  1. <?php
  2. $query = "SELECT
  3. referrer,
  4. COUNT(*) AS counter
  5. FROM
  6. referrals
  7. GROUP BY
  8. referrer
  9. ORDER BY
  10. counter DESC
  11. LIMIT 50";
  12. ?>


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.

6 antwoorden

Gesponsorde links
Offline Wim - 31/12/2007 13:56
Avatar van Wim Crew algemeen INNER JOIN? Kijk maar eens bij de tutorials. Als je er niet uitkomt reageer je maar met waar je vast zit ;)
Offline Stefan14 - 31/12/2007 14:04
Avatar van Stefan14 PHP gevorderde ik heb nog nooit met joins gewerkt, dus een opstapje zou welkom zijn 
Offline Filip - 31/12/2007 14:25
Avatar van Filip IRC guru Hier vind je de tutorial over joins. Indien het je niet lukt kan je steeds opnieuw je vraag stellen.
Offline Wim - 31/12/2007 14:51
Avatar van Wim Crew algemeen evt kan je gebruik maken van een query builder oid:
http://www.goog...n&meta=
Offline CDNC - 31/12/2007 14:59
Avatar van CDNC PHP ver gevorderde
  1. SELECT
  2. refReg.referrer AS referrer,
  3. refReg.userID AS newUser,
  4. COUNT(refReg.id) AS counterReg,
  5. COUNT(refFol.id) AS counterFol
  6. FROM
  7. referrals AS refReg,
  8. referFolows AS refFol
  9. WHERE
  10. refFol.referrer = refReg.referrer
  11. GROUP BY
  12. refReg.id
  13. ORDER BY
  14. counterReg DESC, counterFol DESC
  15. LIMIT
  16. 50


iets in die vorm zou het kunnen zijn
Offline Stefan14 - 31/12/2007 15:29
Avatar van Stefan14 PHP gevorderde Het is dit geworden:

  1. SELECT
  2. u.referer,
  3. ( SELECT COUNT(id)
  4. FROM users
  5. WHERE referer = u.referer
  6. GROUP BY referer
  7. ) AS aantal_lid,
  8. ( SELECT COUNT(id)
  9. FROM referers
  10. WHERE referer = u.referer
  11. GROUP BY referer
  12. ) AS aantal_gestuurd
  13. FROM
  14. users AS u
  15. GROUP BY
  16. u.referer
  17. ORDER BY
  18. aantal_lid DESC,
  19. aantal_gestuurd DESC
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.28s