如何修复这个mySQL代码以显示正确的输出?

时间:2015-05-06 14:57:50

标签: php mysql

我的mySQL表格如下

id - hash - page - timestamp
1 - ig35sdf89 - page1 - 2015-05-06 12:03:54
2 - ig35sdf89 - page2 - 2015-05-06 12:06:54
3 - ig35sdf89 - page1 - 2015-05-06 12:08:54
4 - xgd98rgf - page1 - 2015-05-06 12:10:54
5 - aaaat43gr - page3 - 2015-05-06 12:12:54

我的问题是什么是mySQL查询,以便显示类似于我将通过其时间戳显示每个哈希顺序的路径的内容:

ig35sdf89  - page1 - 2015-05-06 12:08:54
           - page2 - 2015-05-06 12:03:54
           - page1 - 2015-05-06 12:06:54

xgd98rgf  - page1 - 2015-05-06 12:10:54

aaaat43gr  - page3 - 2015-05-06 12:12:54

这是直到现在的代码

$sql= mysql_query("SELECT IF(@tempHash = `hash`, '', @tempHash := `hash`) `hash`, page, `timestamp` 
FROM behaviour
JOIN (SELECT @tempHash := '')s
ORDER BY `timestamp`
");

 while($row = mysql_fetch_array($sql)) {
     echo '<tr><td>'.$row[hash].'</td><td>'.$row[page].'</td><td>'.$row[timestamp].'</td></tr>';
 }

问题是输出即使运行,它也有一个bug。散列abc的路径(页面)被分割。我的意思是它显示来自abc哈希的多个页面,然后用xxx123页面显示xxx123页面,然后继续用户abc。我想要的是abc页面的完整列表,时间戳,然后继续xxx123,依此类推。

我注意到由于时间戳而进行分割。

如果user1的页面时间戳为14:10:12,而下一个14:10:30且user2的时间戳为14:10:20则会打破user1的路径,显示user2,然后继续user1

1 个答案:

答案 0 :(得分:0)

    <?php

$sql= mysql_query("SELECT IF(@tempHash = `hash`, '', @tempHash := `hash`) `hash`, page, `timestamp` 
FROM behaviour
JOIN (SELECT @tempHash := '')s
ORDER BY `hash`
");

    $xhash = "";
     while($row = mysql_fetch_array($sql)) {
        if($xhash != $row['hash']){
           echo '<tr><td>'.$row[hash].'</td><td>'.$row[page].'</td><td>'.$row[timestamp].'</td></tr>';
        }else{
            echo '<tr><td></td><td>'.$row[page].'</td><td>'.$row[timestamp].'</td></tr>';
        }
        $xhash = $row['hash'];
     }

    ?>