[PHP/MYSQL]algemene routes door site opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Ik wil weten hoe de meeste mensen door de site heengaan. Daarom sla ik van iedere hit een volgnr, een bezoekersid, en een pagina id op. Ik heb nu de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?PHP
function pageroute(){
/* functie in testfase voor een verzameling van de hits om zo de paginaroute te bepalen. */
/* de array vullen met de gegevens uit de database */
   $sql="SELECT id FROM bezoekers"; 
                $result = mysql_query($sql); 
while ($row = mysql_fetch_object($result)){
   $hitsql="SELECT page, volgnr FROM hits WHERE user='".$row->id."' ORDER BY volgnr ASC";
                $hitresult = mysql_query($hitsql);
   while ($hitrow = mysql_fetch_object($hitresult)){
         $route[$hitrow->volgnr][]=$hitrow->page;
   }
} 
/* de gegevens gecombineerd uit de array halen */
foreach ($route AS $key => $array) 
  { 
    echo '<b>Stap: '.$key.'</b><br>'; 
    foreach (array_count_values($array) AS $page => $count) 
    { 
        echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|_page:'.$page.'('. $count.'x)<br>'; 
    } 
    echo "<br>\n"; 
  } 
}
?>

Deze heeft als uitvoer ongeveer het volgende:
Stap: 1
|_page:1(2x)

Stap: 2
|_page:2(1x)
|_page:5(1x)

Stap: 3
|_page:3(1x)
|_page:2(1x)

Het probleem is nu dat ik niet weet waar de gebruiker van pagina 1 naartoe gaan, ze kunnen zowel naar 1 als 5 zijn eggeaan. Het enige wat daar op dit moment zeker van is, is dat het onder volgnr 2 valt. Nu wil ik dus op één of andere manier weten hoe ik dit wel zou kunnen ontdekken.

[ Voor 16% gewijzigd door djluc op 23-12-2002 16:50 . Reden: mijn :punctatie: schijnt iets met. choco-lade te, maken, te; hebben ]


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

nou je uitleg kan wel wat leestekens gebruiken, kan er geen chocola van maken

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
Tis mij ook niet himmel duidelijk, maar ik ben zelf ook met zo iets bezig geweest. Maar ik neem aan dat t zijn bedoeling is de paden van gebruikers door de site na te gaan, wat natuurlijk een vrij ingewikkeld proces is :)

Maar helaas ik zie het probleem niet echt ik denk dat je je moet contreren op het doorspitten van veel voorkomende paden t traceren van alle paden is niet mogelijk of levert een gigantische database load op.

Ik zelf sla alle unieke stappen op en ga daar een keer een analyse tool voor knutselen.

edit:

Ik lul vaag :D

[ Voor 12% gewijzigd door martinvw op 23-12-2002 15:51 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Waarom sla je niet de pagina en de tijd op, sorteer op tijd en je hebt precies hoe ze door de site heenklikken en hoelang ze op een specifieke pagina blijven...

sim-pel :P

(gecombineerd met referrer kun je hier leuke statistieken uit genereren van meest gebruikte navigatiepaden)

[ Voor 25% gewijzigd door Bosmonster op 23-12-2002 16:11 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Ik zal het proberen wat duidelijker uit te leggen adhv wat quotes:
Maar helaas ik zie het probleem niet echt ik denk dat je je moet contreren op het doorspitten van veel voorkomende paden t traceren van alle paden is niet mogelijk of levert een gigantische database load op.
Waarom zou dit zo'n grote load op moeten leveren? Zoals je in mijn stukje code kunt zien heb ik alles al op de juiste manier in een array, het probleem is echter het uitlezen er van. Ik denk dat ik een flag bij moet houden oid van de vorige pagina.
Ik zelf sla alle unieke stappen op en ga daar een keer een analyse tool voor knutselen.
Dat opslaan heb ik idd al gedaan, die tool ben ik nu mee bezig
Waarom sla je niet de pagina en de tijd op, sorteer op tijd en je hebt precies hoe ze door de site heenklikken en hoelang ze op een specifieke pagina blijven...
Heb momenteel even gekozen voor volgnr's omdat dit eenvoudiger is icm array's. Later wil ik idd met een tijd/datum gaan werken. Alle hits worden op dit moment al met paginaid, bezoekerid en volgnr opgeslagen.
(gecombineerd met referrer kun je hier leuke statistieken uit genereren van meest gebruikte navigatiepaden)
Dat is dus net mijn bedoeling, eindelijk iemand gevonden die er iets van begrijpt. niet neg. bedoeld tegen de rest uiteraard, ben gewoon al een tijd op zoek vandaar ;-)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Ik doe zelf iets soortgelijks in onze statistieken. Deze slaat naast opgevraagde pagina's e.d. ook nog alle informatie over de client op (Flashversie, browser, OS, etc).

"Getrackte" pagina's kun je in de statistieken opvragen met informatie als de top 3 interne referrers en top 3 interne uitgangspagina's. Uit deze losse top 3's kun je eventueel (doe het zelf niet) wel weer de meest gebruikte paden genereren.

Erg interessante informatie allemaal als je wilt weten of je navigatie werkt voor je gebruikers.

Oftewel: ik denk dat je ook op deze manier te werk moet gaan.. eerst top 3's oid genereren voor iedere pagina (of alleen de enkele meest gebruikte, das makkelijker) en deze weergeven als pad oid? Tis vrij ingewikkeld om uit te voeren iig.. vandaar dat ik hetzelf nog niet gedaan heb :)

[ Voor 22% gewijzigd door Bosmonster op 23-12-2002 16:55 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
wat bedoel je met die top 3's? bedoel je van iedere pagina die ik in de db heb staan de 3 meest gebruikte ref's opzoeken en daarna van die pagina's weer hetzelfde doen? Dat idee had ik namelijk erst ook allen gaat dat niet omdat het gebruiker-based moet zijn, en niet pagina based. Het is bij deze site anmelijk niet zo dat er een vaste route in zit, anders had dit wel gekund. Het is mogelijk dat pagina 3 als 3e pagina bezocht wordt maar dit kan ook de 100e zijn.

Volgens mij moet het probleem anders benaderd worden, dmv het gebruik van recursieve functies. We beginnen met $nivo=1, we kijken welke waarden volgnr 1 hebben, en nemen daarvan eerst de eerste, we kijken welke bij volgnr 2 de waarde van de eerste hebben, die nemen we en pakken weer de eerste, daaran de 2de enz. Als iemand iets met deze denkwijze denkt te kunnen, of een geheel andere kijk heeft hierop show it! :9

[ Voor 33% gewijzigd door djluc op 23-12-2002 18:22 . Reden: een heldere ingeving...hoe helder?geen id ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Heeft er niemand een idee of deze pzet zo gaat lukken, of is dit probleem gewoon te moeilijk bekeken en is er een gemakkelijkere oplossing?

Verwijderd

Kan je die informatie niet uit je server-logs halen? Als je toegang hebt tot de server logs zijn er mooie statistiekjes van te bouwen, zoniet, neem een andere provider.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
In dit geval zou het nog wel gaan, maar ik wil het uiteindelijk uit gaan breiden voor meerdere sites, en nog wat andere dingen er mee gaan doen, en dan is het praktisch onmogelijk om dit nog te doen. Verder gaat het ook niet om de opslag maar om het uitlezen, en of dat nou gemakkelijker zou moeten zijn uit een log bestand dan een array betwijfel ik.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Is er niemand anders die iets van dit onderwerp afweet, of al iets heeft geprobeerd?

Acties:
  • 0 Henk 'm!

Verwijderd

Als je het sessieid opslaat, weet je waar een gebruiker is geweest per browsersessie.
Dat sorteer je eerst op sessie id, en dan op datum/tijd, dat weet je wat die gebruiker in welke volgorde gedaan heeft.

(je database wordt wel snel erg groot op deze manier.)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Die gegevens opslaan is al gelukt, en ze in een array werkt ook al met deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?PHP
/* de array vullen met de gegevens uit de database */ 
   $sql="SELECT id FROM bezoekers";  
                   $result = mysql_query($sql);  
while ($row = mysql_fetch_object($result)){ 
   $hitsql="SELECT page, volgnr FROM hits WHERE user='".$row->id."' ORDER BY volgnr ASC"; 
                   $hitresult = mysql_query($hitsql); 
   while ($hitrow = mysql_fetch_object($hitresult)){ 
            $route[$hitrow->volgnr][]=$hitrow->page; 
   } 
} 
?>

DIt maakt een array met de volgende gegevens:
user1 user2
page 1 page 1
page2 page 2
Het enige wat nog moet gebeuren is de routes die de gebruikers volgen weergeven. Zie hiervoor ook mijn vorige posts. Het probleem is volgens mij dat ik iedere route uit de array moet halen, en dus niet alleen moet kijken naar het volgnr.

[ Voor 10% gewijzigd door djluc op 28-12-2002 12:57 . Reden: extra info. ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als ik het zo zie kan je dat gewoon in je query regelen:
PHP:
1
$hitsql="SELECT page, volgnr FROM hits WHERE user='".$row->id."' ORDER BY user, volgnr ASC";

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Dat lijkt ook zo eenvoudig, het probleem is echter dat ik ze gecombineerd wil weergeven, dus 10 mensen beginnen op de homepage, daarbvan gaan er 3 naar pagina 2 en 7 naar pagina 3, van pagina 3 gaan er 2 naar pagina 4, en de rest 5 dus naar pagina 5.

Acties:
  • 0 Henk 'm!

Verwijderd

Dus het probleem is niet meer hoe je het moet opslaan of moet querieen, maar hoe je de query moet omzetten naar een mooie weergave?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Ja, we zijn zelfs al een stap verder, we moeten gewoon weten hoe we een gevulde array uit kunnen lezen. En dat is nou net het prob.

Acties:
  • 0 Henk 'm!

Verwijderd

Maar wat is het probleem met het uitlezen van een array? Omdat die multi-dimensionaal is? Wellicht helpt dit iets: http://www.zend.com/manual/language.types.array.php

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Het is niet moeilijk om een bepaalde waarde uit te lezen, waarvan je weet waar deze staat, of gewoon alle waarden uitlezen. Lastig wordt het pas als je die gegevens wilt gaan combineren, in een recursief iets welteverstaan. Heb jij dan misschien een idee hoe je in een multi-dimensionale array het volgende kunt doen:
-neem iedere unieke waarde in $array[1]
-neem alle unieke waarden in $array[2] waar $array[1]==de uniek waarde van de vorige regel.
-dit moet dus zo doorgaan tot alles gedaan is, het idee he ik dus wel maar hoe ik dit uit moet voeren is dus het probleem.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
In dat artikel van zend staan alleen wat basisdingen, maar ook zij halen alleen specifieke gegevens uit de array, bijv $array[1][2]. Hier weet ik echter niet wat er in de araay staat.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

zoiets?
http://www.clicktracks.com/product1.php

ben er ff mee bezig geweest, dit is wel een HEEL erg kewl programma :)

[ Voor 44% gewijzigd door chem op 02-01-2003 13:15 ]

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Ja hier lijkt het een beetje op, alleen heb je met dit programma, zo vind ik, niet echt een goed overzicht over de gehele site omdat je alleen maar een klein gedeelte steeds laat zien. Het maakt mij niet zoveel uit als je veel naar rechts moet scrollen als ik daardoor een compleet overzicht kan geven. Verder geeft dit programma niet de echte routes weer door de site maar alleen de reffers van iedere pagina, dat is niet zo heel erg moeilijk, gewoon een pagina-id, en refferer-id opslaan.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

Een volledig pad genereren, wil je dat dan van elke unieke bezoeker doen?
Je zou alle pagina's/nodes op een image kunnen plotten met lijnen tussen de nodes, maar daarmee zie je nog geen 'route'. Een gemiddelde route heeft ook geen zin, dat zegt vrijwel niks.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Het wordt niet een gemiddelde route(wat zie jij als een gemiddelde route, die het meeste voorkomt oid? Dan is het voor mij namelijk wel waardevol) maar alle complete routes, die ik dan later misschien nog wel beperk tot een bepaalde top, maar da boeit nu even niet. VAn 1 bezoeker de route ophalen is me al gelukt, das vrij eenvoudig:
code:
1
SELECT page, volgnr, datum FROM hits WHERE user='".$row->id."' AND site='$siteid' ORDER BY volgnr ASC

Dat pad van iedere bezoeker heb ik al opgehaald en in een array egzet door middel van de bovenstaande codevoorbeelden.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Wat slaat die clicktracs noueigenlijk op, per pagina de refs, of topch wat meer?

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 08:43
djluc schreef op 03 januari 2003 @ 21:10:
Wat slaat die clicktracs noueigenlijk op, per pagina de refs, of topch wat meer?
de route die de gebruiker aflegt dus zijn keuzes, kiest hij nu voor een appel of een banaan.. bijvoorbeeld. En dan per gebruiker, dus in groot detail..

|>


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

djluc schreef op 03 January 2003 @ 21:10:
Wat slaat die clicktracs noueigenlijk op, per pagina de refs, of topch wat meer?

Clicktracks slaat niks op, maar analyseert je access logs. Des te meer info in je logs, des te meer data en acurater hij kan werken.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
Ja oke, maar het gaat wel om het princiepe wat het systeem gebruikt.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07:32
chem schreef op 02 januari 2003 @ 13:54:
Een volledig pad genereren, wil je dat dan van elke unieke bezoeker doen?
Je zou alle pagina's/nodes op een image kunnen plotten met lijnen tussen de nodes, maar daarmee zie je nog geen 'route'. Een gemiddelde route heeft ook geen zin, dat zegt vrijwel niks.
Je kutn er verschillende dingen mee, denk aan advertenties plaatsen in een bepaalde volgorde, ja dit gaat echt heel ver...
Pagina: 1