döngünün içinde güncellemek sonra eklemek

1 Cevap php

Ben bir php komut dosyası var, ben cron çalıştırmak için kullanabilirsiniz.

Bu komut çalıştırırken 16000 kullanıcı kayıtları üzerinde yaklaşık 13 dakika sürer.

Please advice me to make this script running with the best performance.

Ben güncelleştirmeyi koymak, herhangi bir sorun varsa o zaman bir döngü içine eklemek, ya da bir döngü içinde güncelleştirmek sonra eklemek olduğunu bilmek gerekir.

$db_conn = getDbObject('my_db');

$now_timestamp = time();

$message_text = getMessage('notify');

$users_sql = "SELECT * FROM users_tbl WHERE status = 'sub' and expire_timestamp < '{$now_timestamp}' ";

$users_result = mysql_query($users_sql,$db_conn);

while($user_row = mysql_fetch_assoc($users_result)){

    $update_user_sql = "UPDATE users_tbl SET status = 'pending' WHERE user_id = '{$user_row['user_id']}' ";

    mysql_query($insert_message_sql,$db_conn);

    $insert_message_sql = "INSERT INTO 
                                messages_tbl 
                                        (
                                            message_id ,
                                            message_text ,
                                            user_id ,
                                            status                          
                                        )
                                    VALUES 
                                        (
                                            NULL , 
                                            '{$message_text}', 
                                            '{$user_row['user_id']}',  
                                            '0',                                            
                                        )";


    mysql_query($insert_message_sql,$db_conn);

}

mysql_close($db_conn);

1 Cevap

Ben güncelleştirmeyi koymak, herhangi bir sorun varsa o zaman bir döngü içine eklemek, ya da bir döngü içinde güncelleştirmek sonra eklemek olduğunu bilmek gerekir.

Tabii bu bir sorundur.

Sen döngü kurtulmak ve işlemleri kümesi tabanlı yapmak almalısınız:

INSERT
INTO    messages_tbl (message_id, message_text, user_id, status)
SELECT  NULL, '{$message_text}', user_id, '0'
FROM    users_tbl
WHERE   status = 'sub' 
        AND expire_timestamp < '{$now_timestamp}'

UPDATE  users_tbl
SET     status = 'pending'
WHERE   status = 'sub' and expire_timestamp < '{$now_timestamp}'