我在我的页面中保存了用户的访问和时间。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,首先访问页面 1,然后访问页面 2,页面 3 和再次访问页面 1。
我现在使用的 sql 查询如下:
结果是:
page1 (last page)
page3
page2 (first page)
但实际上,正确的输出应该是
page1 (last page)
page3
page2
page1 (first page)
问题是,如果用户访问同一页面,它不会显示访问特定页面的所有时间,而是将其移动到顶部。所以路径不正确。
我应该对 SQL 查询进行哪些更改才能解决此问题?
问题是您按页面分组,因此多次访问按日期折叠为一个。
同时删除 max(时间戳)和按日期分组...他们使双重访问消失
SELECT
page,
`timestamp`
from behaviour
WHERE `hash` = 'user1'
order by `timestamp` desc
您应该删除group by
中的page
列。
正确的是显示的结果(三个结果)。
如果我理解正确,您将用户ID与数据一起保存。
从您的示例中,前 3 次访问记录了一次user.id = 1
,然后最后一次访问记录了 user.id = 2
次。然后,如果您尝试排队访问记录,则无法获得最后一个user 1
。因此,您得到"错误"的输出(这是正确的,但我认为它是错误的)
您必须确保user.id
与用户表的 pimery 键相关,才能获得正确的输出
更新 1:
好的,我又看到了更新。这一次,如果您按一个属性对结果进行分组,则此属性中的相同值将仅显示一次。您不需要group by page
队列。
我认为最好按user
或date
分组(除非你愿意,否则日期不是必需的)
我想问题是当您也按页面ID对结果进行分组时。 尝试省略它并检查结果。
不是 结果应该是
- 页1
- 页2
- 页3
- 页1
根据时间
如果是这种情况,这将起作用
select page, timestamp = min(timestamp) from behaviour group by page,timestamp