Archief - PHP: resultaten vergelijken

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

[f8]-[Iwan]

Legacy Member
Ik heb 2 resultaten gekregen uit 2 while loop's:

resultaat 1:
1 81.241.221.106
2 64.12.116.20
3 209.220.244.115
4 217.121.162.57

Resultaat2:
1 81.241.221.106
2 64.12.116.20
3 209.220.244.115
4 217.121.162.57
5 192.168.1.1
6 217.136.221.86

Hoe kan ik een derde resultaat krijgen?

1 192.168.1.1
2 217.136.221.86

Dus de records die niet in resultaat 1 zitten maar wel in resultaat 2 in een nieuw resultaat zetten. Dit is om een trafiek na te gaan, bezoekers die terugkomen worden in een ander kleur gezet...
ps. SQL: met een left join lukt het niet want de resultaten1 zitten ook in de db waar de resultaten2 uit komen en omgekeerd.

killgore

Legacy Member
wat duidelijker mag ook wel :s

ik gok dat je die resultaten met een fetch_array of zo krijgt.

Mssch je code posten ;).

[f8]-[Iwan]

Legacy Member
Databasen zijn als volgt:
Als er een bezoeker voor de eerste maal komt wordt er een record weggeschreven in uniquetraffic. Als de bezoeker terugkomt wordt er gecontroleerd of het ip aanwezig is in uniquetraffic, zo ja wordt er een record weggeschreven in traffic, en dit telkens hij opnieuw terugkomt.
Ik wil dus de terugkerende bezoekers in het vet zetten.

Resultaat 1:

PHP:
<?php
$query="select *from uniquetraffic where date like '$date2%' order by time desc";
mysql_db_query("mijn_database", $query);
		
if ($date2){
if ($result)
{
while ($r = mysql_fetch_array($result))
{
$ip = $r["ip"];
$datum = $r["date"];
$time = $r["time"];

echo"<tr>
<td$ip</td>
<td>$datum, $time</td>
		  </tr>
";

}

}

}

?>

Resultaat 2:

PHP:
<?php
$query="SELECT count(*) as aantal, ip from mijn_tabel where date like '$date2%' group by ip order by aantal desc"; 

$result = mysql_db_query("miijn_database", $query); 

if ($result) 
{ 
while ($r = mysql_fetch_array($result)) 
{ 
$ip = $r["ip"]; 
$aantal = $r["aantal"]; 

echo"<tr>
<td>$ip</a></td>
<td>$aantal</td> 
</tr> 
"; 

} 

} 

?>

dJeez

Legacy Member
Als je elk bezoek opslaat in je traffic tabel (dus ook het eerste) kan je afgaan op het aantal keren dat het IP voorkomt (maw COUNT gebruiken). Is dat 1x dan is de bezoeker slechts 1x langsgeweest en beeld je dat IP normaal af, is dat meer dan 1x dan is de bezoeker meer dan 1x langsgeweest en beeld je dat IP in 't vet af.

Uit die tabel kan je dan trouwens direct de unieke IPs destilleren via een select distinct op IP.

[f8]-[Iwan]

Legacy Member
Ik wil de bezoekers die terugkeren in het vet zetten.
bv. een bezoeker die voor de eerste maal op 01-06-2004 geweest is en dan terug op 03-06-2004
Je moet ook weten dat er bij elk bezoek aan gelijk welke pagina een record wordt weggeschreven met datum, ip, bezochte pagina en het uur,
dus voor elke bezoeker die meer dan 1 pagina bekeken heeft zitten er meerdere records in de db.traffic, in de db.uniquetraffic kan er maar 1 record per ip zitten en dat is de datum en tijd van de allereerste hit op mijn site van dat bepaald ip.

Cakeman

Legacy Member
Kan je niet gewoon een table 'Visitors' maken met volgende velden:
- id
- IP

En een table VisitesPages met volgende velden:
- id
- visitorID
- page
- tijd

Wanneer je een nieuw IP krijgt, zet je het in de table Visitors.
Bij elke pagina, ga je in de table VisitedPages een veld toevoegen met het visitorID (verwijst naar een rij in de table Visitors), de pagina en het tijdstip.

Wanneer je een group by visitorID doet op de tweede table, en het aantal id's telt, dan weet je hoeveel maal de gebruiker met dat IP (visitorID verwijst ernaar) een pagina bezocht hebben.
Als die count groter is dan 1, dan is het een wederkerende bezoeker en moet hij in het vet komen.

dJeez

Legacy Member
Werk dan met sessies en zet de sessie id bij in de traffic tabel. Selecteer vervolgens op IP en tel het aantal verschillende sessie IDs voor dat IP. De sessie zal nl. niet wijzigen tijdens het bezoek, maar wel tussen de verschillende bezoeken.

select ip, count(distinct sessionid) from traffic group by ip

BART_SIMPSON416

Legacy Member
K heb hier een users online script.
Maybe handig voor te zien hoe ik gebruikers uit elkaar haal tijdens bezoeken.
page.php
PHP:
<?php 
mysql_connect("localhost", "username", "pass");   // Your MySQL user settings :) 
mysql_select_db("databasename"); //here your database name :D 

$s_aantal = mysql_query("Select Count(id) From bezonline Where ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error()); 

if (!mysql_result($s_aantal, 0)) 
    mysql_query("Insert Into bezonline (id, ip, tijd) Values ('NULL', '".$_SERVER['REMOTE_ADDR']."', '".time()."')") or die(mysql_error()); 
else { 
    mysql_query("Update bezonline Set tijd = '".time()."' Where ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error()); 
    mysql_query("Delete From bezonline Where tijd < ".time()." - 60*5") or die(mysql_error()); 
} 
?>

page2.php
PHP:
<?php 
require "page.php"; 
mysql_connect("localhost", "", "");    // MySQL settings 
mysql_select_db("test"); //MySQL database 

$s_aantal = mysql_query("Select Count(id) From bezonline"); 
$aantal = mysql_result($s_aantal, 0); 

if ($aantal > 1 || $aantal == 0) 
    echo "Er zijn<b>".$aantal."</b> bezoekers"; 
else 
    echo "Er is <b>één</b> bezoeker!"; 
?>

Nu de sql:
PHP:
CREATE TABLE `bezonline` ( 
`id` int(11) NOT NULL auto_increment, 
`ip` varchar(50) NOT NULL default '', 
`tijd` varchar(50) NOT NULL default '', 
PRIMARY KEY  (`id`) 
) TYPE=MyISAM AUTO_INCREMENT=15 ;

Als je met een login systeem werkt word het heel simpel om je leden bij te houden die online zit maar denk niet dat het hier het geval is.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan