Как обновить данные по истечении времени истечения - PullRequest
0 голосов
/ 10 июля 2019

Я создал приложение с Codeigniter и хочу сделать работу cron и использовать MySQL

У меня есть таблица 'order' и у меня есть поле наподобие этого

order_id | order_expired_date
001      | 2018-11-12 10:03:33

, и у меня есть таблица'order_payment' вроде этого,

order_id | op_status
001      | pending

У меня есть много полей в этих двух таблицах, но есть только те, которые имеют отношение к этому вопросу

У меня есть код из php, но не в моделиcodeigniter

$result = mysql_query('UPDATE `'order_payment'`
    SET op_status='expired' 
    WHERE
    (UNIX_TIMESTAMP( now( ) ) - `order_expired_date`));

Вопрос в том, как изменить статус в таблице order_payment, чтобы он истекал при истечении времени истечения?

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

После долгих исследований это то, что я придумал - надеюсь, это поможет.В вашем примере я не думаю, что вам нужно ставить одинарные кавычки вокруг имени таблицы order_payment, если только это не является чем-то уникальным для CodeIgniter.

$orderID = mysql_query("SELECT order_id FROM order");  // Get order IDs of order table, assuming it has the same list of order IDs as the order_payment table
$order_ids = array();   // Put in array
while ($row = mysql_fetch_array($orderID)) {
   $order_ids[] = $row['order_id'];
}

foreach ($order_ids as $order_id) {   // Iterating through order_id's of array in order to read same index/row number from both tables
  $expirationDate = mysql_query("SELECT order_expired_date FROM order WHERE order_id='$order_id'");
  $expire = date('M j Y g:i A', $expirationDate);   // Converting MySQL timestamp to correct format for strtotime
  $today = strtotime("now");
  if($today >= $expire)   // If past the expiration date
      mysql_query("UPDATE order_payment SET op_status='expired' WHERE order_id='$order_id'");
}
0 голосов
/ 10 июля 2019

Вы можете использовать следующий код, вам нужно изменить код в соответствии с вашими требованиями ..

<?php

    $servername = "xyz";
    $username = "xyz";
    $password = "xyz";
    $dbname = "xyz";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);

    $sql = "SELECT *,o.`order_id` as `oid` FROM `order` as o,`order_payment` as op WHERE o.`order_id`=op.`order_id` AND op.`op_status`='paid'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {

                  $today = date('Y-m-d');
                  $expDt = date('Y-m-d',strtotime($row['order_expired_date']));

                  if($today==$expDt){
                      $updCltSql = "UPDATE `order_payment` SET `op_status`='expired' WHERE `order_id`='".$row['oid']."'";
                      $conn->query($updCltSql);                        
                  }             
        }
    }

    $conn->close();
?>

Мы всегда предпочитаем файл core-php как cron-job ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...