aantal unieke inloggen tellen
Nu heb ik een hoop data van IP adressen en datums van inloggen. Ik wil voor de aardigheid eens zien welk IP adres het vaakste inlogt en wat het gemiddelde aantal bezoeken is per IP adres.
Daar heb ik wat hulp bij nodig, ik kan het niet met Google vinden, ik zoek vermoedelijk verkeerd.
Ik zoek dus
A) een PHP MYSQLI regel die per uniek IPadres optelt hoe vaak dat IP adres voorkomt in de database.
B) een PHP MYSQLI regel die van al die bovenstaande regels een gemiddelde weergeeft.
Kan iemand me op het spoor zetten naar een oplossing? ;-)
Toevoeging op 17/12/2016 10:47:25:
Ik heb dus al $sql="SELECT pagina, COUNT(DISTINCT(ipvan)) FROM inloggen WHERE bezoekersoort='1' GROUP BY pagina"; maar die telt alle IP adressen die ooit ingelogd geweest zijn. (1= zoekmachines)
wat is pagina in je query? Waarom doe je daar een group by op?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT AVG(t.aantal)
FROM (
SELECT pagina, COUNT(*) AS aantal
FROM inloggen
GROUP BY ipvan
) AS t
FROM (
SELECT pagina, COUNT(*) AS aantal
FROM inloggen
GROUP BY ipvan
) AS t
Gewijzigd op 17/12/2016 13:42:41 door Frank Nietbelangrijk
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$sql3="SELECT pagina, COUNT(pagina) AS aantal FROM inloggen WHERE bezoekersoort='0' GROUP BY ipvan";
if(!$res3 = mysqli_query($link, $sql3))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
echo '<table>';
echo '<tr><td BGcolor=#FFFF80>Dag</td><td BGcolor=#FFFF80>datum</td><td BGcolor=#FFFF80 >tijd</td><td BGcolor=#FFFF80>IP adres</td><td BGcolor=#FFFF80>bezochte pagina</td><td BGcolor=#FFFF80>IPvan</td><td BGcolor=#FFFF80>vorige pagina</td></tr>';
while($row2 = mysqli_fetch_assoc($res3))
{
echo '<tr><td>'.$row2['dag'].'</td><td>'.$row2['datum'].'</td><td><FONT COLOR=#993300 SIZE=-1>'.$row2['tijd'].'</FONT></td><td>'.$row2['ipserver'].'</td><td>'.$row2['pagina'].'</td><td><FONT COLOR=#008000 SIZE=-1>'.$row2['ipvan'].'</FONT></td><td>'.'<FONT COLOR=#000000 SIZE=-1>'.$row2['komtvan'].'</FONT></td></tr>';
}
if(!$res3 = mysqli_query($link, $sql3))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
echo '<table>';
echo '<tr><td BGcolor=#FFFF80>Dag</td><td BGcolor=#FFFF80>datum</td><td BGcolor=#FFFF80 >tijd</td><td BGcolor=#FFFF80>IP adres</td><td BGcolor=#FFFF80>bezochte pagina</td><td BGcolor=#FFFF80>IPvan</td><td BGcolor=#FFFF80>vorige pagina</td></tr>';
while($row2 = mysqli_fetch_assoc($res3))
{
echo '<tr><td>'.$row2['dag'].'</td><td>'.$row2['datum'].'</td><td><FONT COLOR=#993300 SIZE=-1>'.$row2['tijd'].'</FONT></td><td>'.$row2['ipserver'].'</td><td>'.$row2['pagina'].'</td><td><FONT COLOR=#008000 SIZE=-1>'.$row2['ipvan'].'</FONT></td><td>'.'<FONT COLOR=#000000 SIZE=-1>'.$row2['komtvan'].'</FONT></td></tr>';
}
Dat is een deel wat ik heb. Het 'AS aantal from' is voor mij onduidelijk. Is dat het resultaat en niet res3?
Hier http://www.eenander.xyz/scripts/stats1.php zie ik het resultaat.
Toevoeging op 17/12/2016 13:50:42:
Obelix en Idefix en Frank niet belangrijk, hartelijk dank voor jullie reactie.
Toevoeging op 17/12/2016 13:55:48:
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
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
echo '</table>';
}
echo "<br><br>";
$sql3="SELECT pagina, COUNT(pagina) AS aantal FROM inloggen GROUP BY ipvan";
$sql4="SELECT AVG(t.aantal)
FROM (
SELECT pagina, COUNT(*) AS aantal
FROM inloggen
GROUP BY ipvan
) AS t";
if(!$res3 = mysqli_query($link, $sql3))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
if(!$res4 = mysqli_query($link, $sql4))
{
trigger_error('Fout in query: '.mysqli_error());
}
echo '<table>';
echo '<tr><td BGcolor=#FFFF80>Dag</td><td BGcolor=#FFFF80>datum</td><td BGcolor=#FFFF80 >tijd</td><td BGcolor=#FFFF80>IP adres</td><td BGcolor=#FFFF80>bezochte pagina</td><td BGcolor=#FFFF80>IPvan</td><td BGcolor=#FFFF80>vorige pagina</td></tr>';
while($row2 = mysqli_fetch_assoc($res3))
{
echo '<tr><td>'.$row2['dag'].'</td><td>'.$row2['datum'].'</td><td><FONT COLOR=#993300 SIZE=-1>'.$row2['tijd'].'</FONT></td><td>'.$row2['ipserver'].'</td><td>'.$row2['pagina'].'</td><td><FONT COLOR=#008000 SIZE=-1>'.$row2['ipvan'].'</FONT></td><td>'.'<FONT COLOR=#000000 SIZE=-1>'.$row2['komtvan'].'</FONT></td></tr>';
}
echo '</table>';
}
echo "<br><br>";
$sql3="SELECT pagina, COUNT(pagina) AS aantal FROM inloggen GROUP BY ipvan";
$sql4="SELECT AVG(t.aantal)
FROM (
SELECT pagina, COUNT(*) AS aantal
FROM inloggen
GROUP BY ipvan
) AS t";
if(!$res3 = mysqli_query($link, $sql3))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
if(!$res4 = mysqli_query($link, $sql4))
{
trigger_error('Fout in query: '.mysqli_error());
}
echo '<table>';
echo '<tr><td BGcolor=#FFFF80>Dag</td><td BGcolor=#FFFF80>datum</td><td BGcolor=#FFFF80 >tijd</td><td BGcolor=#FFFF80>IP adres</td><td BGcolor=#FFFF80>bezochte pagina</td><td BGcolor=#FFFF80>IPvan</td><td BGcolor=#FFFF80>vorige pagina</td></tr>';
while($row2 = mysqli_fetch_assoc($res3))
{
echo '<tr><td>'.$row2['dag'].'</td><td>'.$row2['datum'].'</td><td><FONT COLOR=#993300 SIZE=-1>'.$row2['tijd'].'</FONT></td><td>'.$row2['ipserver'].'</td><td>'.$row2['pagina'].'</td><td><FONT COLOR=#008000 SIZE=-1>'.$row2['ipvan'].'</FONT></td><td>'.'<FONT COLOR=#000000 SIZE=-1>'.$row2['komtvan'].'</FONT></td></tr>';
}
echo '</table>';
Ik heb nooit begrepen waarom men hun variabelen gaat nummeren met $sql1 en $sql2 etc. Dit getuigd van een slecht ontwerp. (Weten wat je doet is belangrijk).
Bedankt voor de hulp.
Het gemiddelde heb ik laten vallen, ik heb nu een overzicht per IP en per pagina.
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
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
}
echo "<br><br>";
$sql="SELECT pagina, ipserver, COUNT(pagina) AS AANTAL FROM inloggen WHERE bezoekersoort='0' GROUP BY ipserver";
if(!$res = mysqli_query($link, $sql))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
echo "<table>";
while($row = mysqli_fetch_assoc($res))
{
echo "<tr><td> Server: ".$row['ipserver']."</td><td> bezochte pagina: ".$row['pagina']."</td><td>aantal maal bezocht: ".$row['AANTAL']."</td></tr>";
}
echo '</table>';
echo "<br><br>";
$sql="SELECT pagina, COUNT(pagina) AS AANTAL FROM inloggen WHERE bezoekersoort='0' GROUP BY pagina";
if(!$res = mysqli_query($link, $sql))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
echo "<table>";
while($row = mysqli_fetch_assoc($res))
{
echo "<tr><td> Server: ".$row['ipserver']."</td><td> bezochte pagina: ".$row['pagina']."</td><td>aantal maal bezocht: ".$row['AANTAL']."</td></tr>";
}
echo '</table>';
}
}
echo "<br><br>";
$sql="SELECT pagina, ipserver, COUNT(pagina) AS AANTAL FROM inloggen WHERE bezoekersoort='0' GROUP BY ipserver";
if(!$res = mysqli_query($link, $sql))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
echo "<table>";
while($row = mysqli_fetch_assoc($res))
{
echo "<tr><td> Server: ".$row['ipserver']."</td><td> bezochte pagina: ".$row['pagina']."</td><td>aantal maal bezocht: ".$row['AANTAL']."</td></tr>";
}
echo '</table>';
echo "<br><br>";
$sql="SELECT pagina, COUNT(pagina) AS AANTAL FROM inloggen WHERE bezoekersoort='0' GROUP BY pagina";
if(!$res = mysqli_query($link, $sql))
{
trigger_error('Fout in query: '.mysqli_error());
}else{
echo "<table>";
while($row = mysqli_fetch_assoc($res))
{
echo "<tr><td> Server: ".$row['ipserver']."</td><td> bezochte pagina: ".$row['pagina']."</td><td>aantal maal bezocht: ".$row['AANTAL']."</td></tr>";
}
echo '</table>';
}
}
Toevoeging op 17/12/2016 17:15:03:
Als ik nu echter naar de uitslag kijk dan twijfel ik aan de juistheid.
159.203.138.138 acculaden 172 zou dus 172x bij acculaden gekeken hebben.
terwijl die pagina maar acculaden 8 8x bekeken is. ;-)
Ik moet nog meer eens goed naar het script kijken.