假设您想在用户个人资料页面上显示最新的访问者。
你将如何构建它?也许一个名为 uservisitors
的表:
- userid(获得访问的用户)
- visitorid(访客)
- 时间
您将如何使用 mysql 选择它?没有任何重复,我的意思是如果用户 1 访问用户 2 的个人资料,然后 5 分钟后再次访问,我不希望它只显示最新的两个条目
干杯!
最佳答案
SELECT visitorid, MAX(time) AS lastvisit
FROM uservisitors
WHERE userid = ?
GROUP BY
userid, visitorid
ORDER BY
lastvisit DESC
LIMIT 5
在 (userid, visitorid, time)
上创建一个复合索引,以便更快地工作。
这个查询:
SELECT visitorid
FROM uservisitors ui
WHERE userid = ?
NOT EXISTS
(
SELECT NULL
FROM uservisitors uo
WHERE uo.userid = ui.userid
AND uo.visitorid = ui.visitorid
AND uo.time > ui.time
)
ORDER BY
time DESC
LIMIT 5
如果您有很多不同的访问者,可能会更有效率。
在这种情况下,您需要在 (userid, time, visitorid)
上建立索引。
更新:
我博客中的这篇文章比较了这两种方法:
关于php - 最新访客,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050955/