Как лучше всего реализовать задачу CRON в PHP MYSQL? - PullRequest
0 голосов
/ 19 января 2020

Итак, я создал задание CRON, которое работает должным образом и выполняет все как следует, но мой вопрос: есть ли лучший способ построения этого задания CRON для более быстрого выполнения или этого будет достаточно на основе предполагаемой базы пользователей, возможно, несколько тысяч Я хотел бы оптимизировать его, если это возможно или даже необходимо, так как я буду запускать его каждые 5 минут. Я все еще новичок ie, когда дело доходит до работы в CRON, поэтому любые предложения будут великолепны, спасибо.

$adQuery = "SELECT 
        ads.ad_id,
        ads.ad_date,
        ad_updates.ad_id,
        ad_updates.update_count,
        ad_updates.intervals,
        ad_updates.updates_left,
        ad_updates.Time_of_next_update
        FROM
            ads
        INNER JOIN
            ad_updates
        ON
            ads.ad_id = ad_updates.ad_id
    ";

$stmt = $conn->prepare($adQuery);   
$stmt->execute();
$stmtFetch = $stmt->fetchAll();
if($stmt->rowCount() > 0){
  foreach($stmtFetch as $row){

    $id = $row['ad_id'];
    $update_count = $row['update_count'];
    $intervals = $row['intervals'];
    $updates_left = $row['updates_left'];
    $time_of_next_update = $row['Time_of_next_update'];

    $date = date('Y-m-d H:i:s');

    if((strtotime($time_of_next_update) - strtotime($date)) <= 0){

        switch ($row['update_count']) {
            case 0:
                $update_count = '0';
                break;
            case 1:
                $update_count = '30';
                break;
            case 2:
                $update_count = '60';
                break;
            case 3:
                $update_count = '120';
                break;
            case 4:
                $update_count = '180';
                break;
            case 5:
                $update_count = '300';
                break;
            case 6:
                $update_count = '420';
                break;
            case 7:
                $update_count = '720';
                break;
            default:
                break;
        }

        try{
            $query = "UPDATE ads, ad_updates 
                SET 
                    ads.ad_date = :date, 
                    ad_updates.updates_left = (ad_updates.updates_left - 1), 
                    ad_updates.Time_of_next_update =  (ad_updates.Time_of_next_update + INTERVAL $update_count MINUTE) 
                WHERE 
                    ads.ad_id = :id 
                AND 
                    ad_updates.ad_id = :id
                ";  

            $timeQuery = $conn->prepare($query);
            $timeQuery->bindParam(":date", $date);
            $timeQuery->bindParam(":id", $id);
            $timeQuery->execute();
        }catch( PDOException $e ){
            print_r( $e );
        }

    }

    if($updates_left == 0){
        $deletequery = "DELETE FROM ad_updates WHERE ad_id = :id LIMIT 1";
        $deleteUpdate = $conn->prepare($deletequery);
        $deleteUpdate->bindParam(":id", $id);
        $deleteUpdate->execute();
    }
  }
 $conn = null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...