我将访问次数和用户时间保存在我的页面中。 mySQL如下所示:
id - user - page - timestamp
340 - 1 - page1 - 2009-05-18 22:11:11
339 - 1 - page3 - 2009-05-18 22:10:01
338 - 2 - page4 - 2009-05-18 22:08:05
337 - 1 - page2 - 2009-05-18 22:06:00
336 - 2 - page1 - 2009-05-18 22:15:10
...
...
280 - 1 - page5 - 2009-05-17 14:10:10
279 - 2 - page 3 - 2009-05-17 12:05:00
如何使用PHP获得以下输出?
预期的outpout (show.php?user=1)
2009-05-18
page 1 - 2009-05-18 22:11:11 last page
page3 - 2009-05-18 22:10:01 stayed for 1 minute 10 seconds
page2 - 2009-05-18 22:06:00 stayed for 4 minutes 1 second
2009-05-17
page 5 - 2009-05-17 14:10:10 last page
page 3 - 2009-05-17 12:05:00 stayed for 2 hours 5 minutes 10 seconds
到目前为止我做了什么
$sql= mysql_query(SELECT user, page, timestamp FROM paths WHERE DATE(`date`) = '2009-05-18'); // must not set a date, but get all the dates
while($row = mysqli_fetch_array($sql)) {
echo $row["page"]. " - " . $row["timestamp"]. "<br>";
//echo this timestamp - previous timestamp
//if different day then start again
}
答案 0 :(得分:0)
实际上我对此有一个想法,但它对时间没用;
sql = "SELECT user, page, timestamp FROM paths WHERE DATE(`date`) = '2009-05-18')" ORDER BY page ASC,timestamp DESC;
$a = null;
while($row = mysqli_fetch_array($sql)) {
$a[] = $row;
}
$i = 0;
while(i<sizeof($a)){
if($a[i]->page == $a[i+1]->page){
$sub = (int) $a[i+1]->timestamp - (int) $a[i]->timestamp;
echo '' .$a[i]->page. '-' .$a[i]->timestamp.' stayed for '.$sub. 'miliseconds';
}
i = i+2;
}
答案 1 :(得分:0)
试试这个。我没有经过测试。但它应该工作。如果有任何错误意味着让我知道..
// query to fetch the dates first.
$date_query = mysql_query ( "SELECT DISTINCT(DATE(timestamp)) FROM paths order by timestamp asc;" );
while ( $row = mysql_fetch_array ( $date_query ) ) {
echo "<h1>".$row ['timestamp']."</h1><br/>";
// query to fetch the related datas based on the date from the table.
$related_day_result = mysql_query("SELECT * from path where DATE(timestamp) = '".$row['timestamp']."'");
while ( $results = mysql_fetch_array ( $related_day_result ) ) {
echo $results ["page"] . " - " . $results ["timestamp"] . "<br>";
}
}
答案 2 :(得分:0)
此查询几乎可以满足您的所有需求...... SqlFiddle Demo
SELECT page,max(`timestamp`) `timestamp` from paths
group by date(`timestamp`),page order by `timestamp` desc
但如果您需要显示停留时间,则需要计算。如果有任何关于计算的查询我在那里解释
$sql = "SELECT page,max(`timestamp`) `timestamp` from paths
group by date(`timestamp`),page order by `timestamp` desc";
$res = mysql_query($sql) or die(mysql_error());
$lastDate = null;
$diff = 'last page';
$lastVisitTime = '';
while($row = mysql_fetch_array($res))
{
$time = strtotime($row['timestamp']);
$thisDate = date('Y-m-d',$time);
//echo " ".$thisDate;
if($lastDate == $thisDate)
{
$date1 = new DateTime($lastVisitTime);
$date2 = new DateTime($row['timestamp']);
$interval = $date2->diff($date1);
$diff = " stayed ". $interval->h . " hours ".$interval->i . " minutes ".$interval->s." seconds";
/*other method
$time1 = $lastVisitTime;
$time2 = $row['timestamp'];
$sec_diff = strtotime($time1) - strtotime($time2);
$hourdiff = (int)($sec_diff/3600);
$diff = $hourdiff .' hours ';*/
$lastVisitTime = $row['timestamp'];
}
else
{
$diff = 'last page';
$lastDate = $thisDate;
$lastVisitTime = $row['timestamp'];
}
echo $row['page']." ___ ".$row['timestamp']." ___ ". $diff.'<br>';
}