如何编辑此SQL查询以便以请求的方式显示数据?

时间:2016-03-18 21:46:03

标签: php mysql

我将访问次数和用户时间保存在我的页面中。 mySQL如下所示:

id  - user - page - timestamp
340 - 1 - page1 - 2009-05-18 22:11:11
339 - 1 - page3 - 2009-05-18 22:10:01
337 - 1 - page2 - 2009-05-18 22:06:00
336 - 1 - page1 - 2009-05-18 22:05:10

在上面的示例中,用户1首先访问page1,然后访问page2,page3,再次访问page1。

我现在使用的sql查询如下:

结果是:

page1 (last page)
page3
page2 (first page)

但事实上,正确的输出应该是

page1 (last page)
page3
page2
page1 (first page)

问题在于,如果用户访问同一页面,则不会显示访问特定页面的所有时间,但会将其移到最顶层。所以路径不正确。

我应该对SQL查询做出哪些更改才能解决此问题?

5 个答案:

答案 0 :(得分:0)

您应该删除page中的group by列。

答案 1 :(得分:0)

问题在于您按页分组,因此多个访问将按日期折叠。

同时删除最大(时间戳)和按日期分组......它们使双重访问消失

SELECT 
page,
`timestamp` 
from behaviour 
WHERE `hash` = 'user1' 
order by `timestamp` desc

答案 2 :(得分:0)

显示的结果是正确的(三个结果)。

如果我理解正确,您可以使用数据保存用户ID。

在您的示例中,前3次访问记录了user.id = 1,然后记录了user.id = 2。如果您尝试排队user 1访问记录,则无法获取最后一个。因此,你得到“错误的”输出(这是正确的,但我认为这是错误的)

您必须确保user.id与用户表的 pimery密钥 相关才能获得正确的输出

更新1:

好的,我再次看到了更新。这一次,如果您将结果分组为一个 属性 ,则此 属性 中的相同值将仅显示一旦。您不需要group by page队列。

我认为最好按userdate进行分组(除非您愿意,否则不需要日期)

答案 3 :(得分:0)

我想问题是当你按页面ID对结果进行分组时。尝试省略并检查结果。

答案 4 :(得分:0)

结果不应该是

  • 第1页
  • 第2页
  • PAGE3
  • 第1页

根据时间

如果是这样的话,这将起作用

  select page, timestamp = min(timestamp) from  behaviour group by page,timestamp