也许是新手问题,但由于我是新手,我无法真正找到答案。我尝试了许多不同的方法,我在这里找到但仍然......
我所拥有的是一个返回转换后的费率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)";
}
}
答案 0 :(得分:1)
在您的更新查询中尝试此操作
$sql = "UPDATE Price SET price ='12312',update_time =NOW() WHERE update_time <=(NOW - INTERVAL 30 MINUTE";
然后有一个cronjob,每30分钟触发一次这个脚本。