2016-10-17 2 views
0

多分初心者の質問ですが、私は新しいので、実際にはこれに対する答えを見つけることはできません。最後の更新が30分より古い場合、データベースを更新します。

私が持っているのは、変換されたレートUSD/EURを返す1つのAPIが大丈夫で、うまく動作することです。

私が今作ろうとしているのは、データベースを現在のレートで更新し、次の30分間は更新しないことです.APIとページへの呼び出しを多くすることが重くなります。私は正しい答えblaを持って

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

:私はこのような私のBaseController.phpでそれをやろうとしてきました。

実際の質問は、BaseControllerがどこにでも含まれているので、これをどのように論理的にするかです。これは、各ページに負荷がかかることを意味します。これは、時間が最後に更新され、更新されるかどうかを確認するクエリです。それを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 

UPDATE:表

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

私はそれを完全に取り出し、スケジュールされた仕事をXX分ごとに価格を更新させるでしょう。アプリケーションでそれを心配する必要はなく、負荷を大幅に増加させることなく更新時間を短縮することができます。 – jeroen

+1

予定== cronjobを意味する? –

+0

最後に更新された時刻をキャッシュに追加することができます(https://laravel.com/docs/4.2/cache)。 – xpuc7o

答えて

1

てみてくださいこれは更新クエリ

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

次に、30分ごとにこのスクリプトをトリガーするクロノスを持ってください。

+0

私は質問をテーブルで更新しました。それは単なる行です。 –

+0

このクエリは機能しません。 –

+0

ok分を教えてください –

関連する問題