login  Naam:   Wachtwoord: 
Registreer je!
 Forum

top 50 meeste links

Offline kenzo - 15/07/2008 12:27
Avatar van kenzoPHP beginner Hallo,

Ik heb in een database allemaal links staan (welke zijn bezocht op de site).

hoe kan ik nu een top 50 maken van meest bezochte links gerangschikt op volgorde van hoog naar laag?


Bedankt

17 antwoorden

Gesponsorde links
Offline CDNC - 15/07/2008 12:34
Avatar van CDNC PHP ver gevorderde in je database zul je wel een veld hebben met da naam "kliks" of dergelijke. Daarop kun je je records ordenen. en dat doe je met ORDER BY veld ASC/DESC (zie ook tutorials)
Offline Rik - 15/07/2008 12:36
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
En dan alleen nog een LIMIT 1,50 toevoegen om niet onnodig veel gegevens uit de database te halen.
Offline kenzo - 15/07/2008 12:37
Avatar van kenzo PHP beginner nee, in de database staat iedere link opgeslagen

via een script GROUP BY ofzo tel ik iedere link die vaker voorkomt op.

(misschien omslachtig maar ik weet niet hoe ik het anders moet doen)
Offline Berten - 15/07/2008 12:44
Avatar van Berten PHP beginner
  1. SELECT count(*) rank FROM links GROUP BY linkname ORDER BY rank;


iets zoals dit?
Offline kenzo - 15/07/2008 12:51
Avatar van kenzo PHP beginner jah, ok maar er is geen rank?

er staat niet hoevaak hij bezocht is omdat iedere link gewoon 1 keer is opgeslagen.
Offline CDNC - 15/07/2008 12:57 (laatste wijziging 15/07/2008 12:58)
Avatar van CDNC PHP ver gevorderde post da database stuctuur eens, zou veel verhelderen

want ik snap geen reet van wat je bedoelt
Offline kenzo - 15/07/2008 13:02
Avatar van kenzo PHP beginner ok sorry,

Hier is de database structuur:

id || url || ip

id is gewoon optellen
url is de url (de pagina slaat hij op)
ip is natuurlijk het ip adres.


Voorbeeld URL:

index.php?titel=Home


Als nu 25 keer iemand op de home pagina is geweest voegt hij in totaal 25 keer de url in.

(Ik weet dat dat heel omslachtig is).

Hij moest eigenlijk kijken of de url bestaat, zo nee invoegen zo ja updaten naar aantal + 1 ofzo, maar dat kan ik nu niet meer doen.

Ik heb 806,240 links erin staan.


Bedankt!
Offline CDNC - 15/07/2008 13:09 (laatste wijziging 15/07/2008 13:12)
Avatar van CDNC PHP ver gevorderde ok, nu is het duidelijk, maar inderdaat omslachtig, een daar zijn we tegen.

dus: voeg een veld "kliks" toe. en kan je daarop sorteren.

dan hoeft elk url ook maar 1 record in de DB te zijn, kan je veel ruimte besparen.

EDIT: waarom weerhouden 800k+ links je om he db aan te passen?
maak snel een script dat je oude naar je nieuwe systeem omzet (dat kan héél eenvoudig)

Offline TotempaaltJ - 15/07/2008 13:14
Avatar van TotempaaltJ PHP interesse Als je die IP niet echt nodig hebt:

Je kan er toch een scriptje overheen gooien wat het allemaal vereenvoudigt? Is veel minder data in je data(!)base.

Moet je eerst een nieuwe tabel toevoegen, daarin (eventueel id) url en clicks. Url moet wel uniek zijn!
Dan kopieer je alle 806 240 links, en omdat url uniek moet zijn, kopieert hij ze nooit allemaal. Tel daarna van iedere url apart het aantal links en zet dat in clicks.

Noot: Doe dit wel op een duistere zondag, als er niemand op je site is, voor eventuele hele lange laadtijden. 
Offline Berten - 15/07/2008 13:24
Avatar van Berten PHP beginner
  1. SELECT count(*) rank FROM tabel GROUP BY url ORDER BY rank


die rank is gewoon hoe je het resultaat van count(*) wil noemen (en moet dus niet bestaan in je tabel)

hij komt in je fetch_assoc net zoals een kolom naam dat zou doen
Offline Rik - 15/07/2008 13:30
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Als je het gelijk netjes wilt normaliseren zou ik zo'n structuur gebruiken:

tabel 'ips':
- id
- ip

tabel 'urls':
- id
- url
- hits

tabel 'hits'
- ip_id ==> foreign key naar ips.id
- url_id ==> foreign key naar urls.id
Offline TotempaaltJ - 15/07/2008 13:44
Avatar van TotempaaltJ PHP interesse De tabellen ips en hits hoeven alleen als je wilt kijken wie op welke link heeft geklik! (Waarvoor ik geen nut kan bedenken)
Offline Dlol - 15/07/2008 13:54 (laatste wijziging 15/07/2008 13:54)
Avatar van Dlol Lid Lijkt me simpel eigenlijk:

  1. $query = "SELECT * FROM `urls` ORDER BY `hits` DESC LIMIT 50;";
  2. $result = mysql_query($query);
  3. while ($obj = mysql_fecth_object($result)) {
  4. echo "<a href= \"".$obj->url."\">".$obj->url."</a><br>\n";
  5. }
Offline Rik - 15/07/2008 14:06
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
@Bigboss,
Als je dezelfde gegevens wilt behouden moet je die tabellen wel aanmaken. Dat kan nuttig zijn als je wat uitgebreidere statistieken wilt bijhouden met unieke bezoekers en pagina's per bezoeker bijvoorbeeld.
Offline Berten - 15/07/2008 14:07
Avatar van Berten PHP beginner @ Dlol had je het topic gelezen zag je dat hij geen kolom hits heeft

daarom: group by etc

@kenzo kijk naar mijn oplossing, hij zo moeten werken (heb er ook uitleg bijstaan (laatste post van eerste pagina))
Offline Dlol - 15/07/2008 19:07
Avatar van Dlol Lid
Berten schreef:
@ Dlol had je het topic gelezen zag je dat hij geen kolom hits heeft

daarom: group by etc

@kenzo kijk naar mijn oplossing, hij zo moeten werken (heb er ook uitleg bijstaan (laatste post van eerste pagina))



Oeps, sorry, had niet gezien dat er nog een pagina was 
Offline kenzo - 16/07/2008 09:04
Avatar van kenzo PHP beginner jah bedankt,

ik ga inderdaad de database aanpassen. 800 duizend waardes zijn inderdaad wat veel 


Bedankt!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.212s