首页 > 解决方案 > 如何显示仅在 3 小时前发布的结果

问题描述

我正在使用下面提到的代码通过 PHP 和 MySql 在 UITableView 中显示位置。我只需要显示仅在 3 小时之前发布的位置。正如我所说,这些位置由用户发布并列在 UITableView 中。

她是我的选择:

$query = sprintf("SELECT *,
        ( 6371 * acos( 
        cos(radians(%s)) * cos(radians(lati)) * 
        cos(radians(longi) - radians(%s)) + 
        sin(radians(%s)) * sin(radians(lati)) 
        ) ) AS distance
        FROM `markers`
        HAVING distance < 100              
        ORDER BY distance LIMIT 100",
    mysql_real_escape_string($lati), 
    mysql_real_escape_string($longi),  
    mysql_real_escape_string($lati)); 

我的表有(日期和时间),有没有办法显示从当前时间开始 3 小时之前发布的位置。

标签: phpios

解决方案


要查找最近的记录,请使用HAVING时间戳INTERVAL # interval_units列。

因此,在您提供“日期和时间”列的情况下post_timestamp,查询将如下所示:

AND post_timestamp >= (NOW() - INTERVAL 3 HOUR)

因此,它采用带有时间戳的列,在此示例post_timestamp中,其值大于或等于NOW()或高达 previous INTERVAL 3 HOURS

更新完整查询:

SELECT *, post_timestamp,
    ( 6371 * acos( 
    cos(radians(%s)) * cos(radians(lati)) * 
    cos(radians(longi) - radians(%s)) + 
    sin(radians(%s)) * sin(radians(lati)) 
    ) ) AS distance
    FROM `markers`
    HAVING distance < 100 
    AND post_timestamp >= (NOW() - INTERVAL 3 HOUR)
    ORDER BY distance LIMIT 100

现场演示

MySQL 日期和时间函数


推荐阅读