Php 如何显示查询的最后一行,而不是一段时间内发生的所有行?

Php 如何显示查询的最后一行,而不是一段时间内发生的所有行?,php,mysql,Php,Mysql,我使用下面的查询从表a中找出10秒钟内我的网站上的活跃用户,并从表b中显示当前的最后一个页面,我设置了5分钟的持续时间。问题是,在某些情况下,如果浏览速度超过5分钟,它将显示多个页面 我想要的是在每个用户的基础上显示输出,但也只显示最后打开的页面 如何做到这一点 SELECT a.code, b.code, b.page FROM a INNER JOIN b ON a.code= b.code WHERE a.last_active >= NOW( ) - INTERVAL 10 SE

我使用下面的查询从表a中找出10秒钟内我的网站上的活跃用户,并从表b中显示当前的最后一个页面,我设置了5分钟的持续时间。问题是,在某些情况下,如果浏览速度超过5分钟,它将显示多个页面

我想要的是在每个用户的基础上显示输出,但也只显示最后打开的页面

如何做到这一点

SELECT a.code, b.code, b.page
FROM a
INNER JOIN b ON a.code= b.code
WHERE a.last_active >= NOW( ) - INTERVAL 10 
SECOND AND b.timestamp >= NOW( ) - INTERVAL 5 MINUTE 
ORDER BY b.timestamp DESC 
只需将a表与b表中相应的最后一个结果连接起来。没有必要在主选择部分中获取a.code和b.code,因为它们应该是相同的。对于表a中在过去10秒内添加的每条记录,您可以从表b中获得过去5分钟内的相关最新记录

SELECT a.code,
(
    SELECT page FROM b
    WHERE b.code = a.code
        AND b.timestamp >= NOW( ) - INTERVAL 5 MINUTE
    ORDER BY b.timestamp DESC
    LIMIT 1
)
FROM a
WHERE a.last_active >= NOW( ) - INTERVAL 10

下面的查询将返回过去10秒内每个活动条目的最后一页

SELECT * FROM
(
    SELECT a.code, (SELECT b.page from b where a.code= b.code and b.timestamp >= NOW( ) - INTERVAL 5 MINUTE ORDER BY b.timestamp DESC limit 1) lastPage 
    FROM a
    WHERE a.last_active >= NOW( ) - INTERVAL 10 SECOND
) as sub where sub.lastPage is not null

如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL和/或SQLFIDLE,以便我们可以更轻松地复制问题。2.如果您尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。您好,谢谢您,但有一个问题。表A中的用户可能每3秒检查一次,但在表b中有6分钟未浏览。在这种情况下,我从页面bSo获取活动但为空的用户,如果用户在页面中,但未被浏览超过5分钟,则他/她不得显示在输出1054-未知列“page_visited.page”中的“where子句”中现在我在“where子句”中获取未知列“page_visited”,您好,谢谢,但出现了一个问题。表A中的用户可能每3秒检查一次,但在表b中有6分钟未浏览。在这种情况下,我从页面bSo获取活动但为空的用户,如果用户在页面中,但未浏览超过5分钟,他/她不得显示在输出中。我调整了查询,我无法对Yasen的答案发表评论,因此编辑了我的答案。