php - 最新访客

标签 php mysql

假设您想在用户个人资料页面上显示最新的访问者。 你将如何构建它?也许一个名为 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/

相关文章:

mysql - 更改自动递增起始编号?

mysql - 更改 mysql 字段会引发 1064 错误?

mysql - 将 MySQL NOT EXISTS 转换为 INNER JOIN

php get函数在wordpress中不起作用

php - 以某种形式随机挑战?

php - 向 UTC_TIMESTAMP 添加一小时以提交到 MySQL

mysql - 高可用双活数据库设计

带破折号的 MySQL 模式名称导致 Hibernate hbm2ddl.auto 错误

php - WordPress 更改永久链接 404 消息 - 301 重定向

php - 将河豚加密算法从 php 转换为 python