如果上次更新时间超过30分钟,则更新数据库

时间:2016-10-17 11:09:10

标签: php laravel-4

也许是新手问题,但由于我是新手,我无法真正找到答案。我尝试了许多不同的方法,我在这里找到但仍然......

我所拥有的是一个返回转换后的费率USD/EUR的API,可以使用并且效果很好。

我现在要做的是用当前速率更新数据库,而不是在接下来的30分钟内更新数据库,因为对api和页面的调用变得越来越重。我试图在BaseController.php这样做:

$thirtyminutes = strtotime("-30 minutes");
$newPrice=Price::all();
foreach ($newPrice as $newP ) {
   if ( strtotime($newP['update_time']) > $thirtyminutes ) {
        echo 'bla';
   } else { echo 'bla bla'; }
}

我得到了正确答案bla

真正的问题是这样做是多么合乎逻辑,因为BaseController包含在每个页面加载的任何位置,这将使DB查询以检查费率上次更新和更新/取决于时间。在BaseController中使用它是否很好,如果不是,我应该把它放在哪里?

我正在使用Laravel 4.2

更新: 知道为什么这不更新表吗?完全没有错误

$servername = "localhost";
$username = "";
$password = "";
$dbname = ""; 

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}   
$query = "select * from Price";

$thirtyminutes = strtotime("-30 minutes");
if ($result = mysqli_query($conn,$query))
{
    while ($row = mysqli_fetch_assoc($result))
        {
        echo $row['price'].'<br/>'; // from db
        echo $thirtyminutes.'<br/>'; // 30min
        echo strtotime($row['update_time']).'<br/>'; // last inserted time
            if ( strtotime($row['update_time']) > $thirtyminutes ) {
                $sql = "UPDATE Price SET price='12312', update_time = NOW()";

            }
        }
} 

回声在页面上显示正确的数据(我认为):

123.00000000 // which is in database
1476702219 // 30min 
1476694075 // last insert

更新:表

 price               update_time
123.00000000         2016-10-17 11:47:55

更新:第n次

$query = "select * from Price";

if ($result = mysqli_query($conn,$query))
{
    while ($row = mysqli_fetch_assoc($result))
        {
            $sql = "UPDATE Price SET price ='1',update_time =NOW() WHERE update_time >= (NOW() - INTERVAL 30 MINUTE)";                  
        }
}

1 个答案:

答案 0 :(得分:1)

在您的更新查询中尝试此操作

 $sql = "UPDATE Price SET price ='12312',update_time =NOW() WHERE update_time <=(NOW - INTERVAL 30 MINUTE";

然后有一个cronjob,每30分钟触发一次这个脚本。