【问题标题】:How to only select row if table timestamp has been updated如果表时间戳已更新,如何仅选择行
【发布时间】:2013-11-02 06:16:48
【问题描述】:

目前我正在使用以下 php 块选择最新的行,我有一个 ajax 循环,它每隔几秒运行一次这个 php 块以返回提要。我想在最新时间戳未更改时向 ajax 回显 false,以便 ajax 不会重复结果并用相同的内容填充我的 Div (#feed)。

<?php 
require_once 'db_conx.php';
$Result = mysql_query("SELECT * FROM profiles ORDER BY lastupdated desc limit 1") or die   (mysql_error());
while($row = mysql_fetch_array($Result)){
echo $row['name'];
}
mysql_close($con);
?> 

【问题讨论】:

  • 我会将返回结果的最后一个时间戳存储在客户端/会话/等中。然后当 AJAX 调用触发器发送最后一个时间戳以进行比较时。如果没有改变,返回false。

标签: php jquery mysql sql ajax


【解决方案1】:

在会话中的某个地方,或者在请求者中,您需要存储上次获取的时间。最好将其存储为会话变量(我认为这是特定于客户端的,因为不同的客户端将在不同的时间加载),然后获取其lastupdated 时间大于last_fetched 时间的所有记录。

每次从数据库中获取条目,只需将last_fetched 变量更新为当前时间戳。

【讨论】:

    【解决方案2】:

    如果你每 5 秒运行一次,我会做类似的事情

    $Result = mysql_query("SELECT * FROM profiles WHERE lastupdated >  ADDTIME( NOW( ) ,  '-00:00:05.00000' ) ORDER BY lastupdated desc limit 1") or die   (mysql_error());
    $num_rows = mysql_num_rows($result);
    if ($num_rows = 0)  {
       return false;
    } else {
       return true;
    }
    

    这将为您提供过去 5 秒内已更新的所有行,如果它比这更旧,则它应该在上次运行中被拾取。

    希望对你有帮助

    【讨论】:

    • 似乎可行,你打算如何回复ajax没有新内容?
    • 修改了我的答案,如果不完全一样,那么类似的东西应该可以工作。
    【解决方案3】:

    当您从服务器检索结果时,我猜您将最后一个查询的时间戳存储在某个 PHP 变量中,以便比较下一个查询的返回结果。 我会将时间戳作为 where 子句连接到您的查询中,这样您的 sql 查询就会变成类似

    $Result = mysql_query("SELECT * FROM profiles WHERE lastupdated > " . $timestamp . " ORDER BY lastupdated desc limit 1") or die   (mysql_error());
    

    还值得注意的是,如果自上次更新周期以来更新了多个配置文件,则执行此操作时,它将仅返回最近更新的行。 这能回答你的问题吗?

    【讨论】:

    • 不,变量存储和比较是我没有的,我没有存储它。这就是我想知道的。
    猜你喜欢
    • 2020-09-09
    • 2021-02-05
    • 2019-08-05
    • 2021-10-02
    • 1970-01-01
    • 2023-04-02
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多