Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝_Php_Mysql_Sql - Fatal编程技术网

Php 如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝

Php 如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝,php,mysql,sql,Php,Mysql,Sql,如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝试第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助! $limit = 10000; $annee = '2017'; //Co


如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝试第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!
$limit = 10000;
$annee = '2017';

//Counting the lines I need to delete
$sql = " SELECT COUNT(*) FROM historisation.cdr_".$annee." a 
         INNER JOIN transatel.cdr_transatel_v2 b ON a.id_cdr = b.id_cdr ";
$t = $db_transatel->selectAll($sql);

//The number of lines I have to delete
$i = $t[0][0];

do {

    if ($i < $limit) {
        $limit = $i;
    }
    //The problem is comming from that delete
    $selectFromHistoryAndDelete = " DELETE FROM transatel.cdr_transatel_v2
                                    WHERE id_cdr IN (
                                      SELECT a.id_cdr FROM historisation.cdr_".$annee." a
                                      INNER JOIN (SELECT id_cdr FROM historisation.cdr_transatel_v2) b ON a.id_cdr = b.id_cdr
                                    )
                                    LIMIT " . $limit;
    $delete = $db_transatel->exec($selectFromHistoryAndDelete, $params);

    $i = $i - $limit;

} while ($i > 0);
DELETE FROM IN(1,2,3,...10000)
DELETE FROM IN(1,2,3,...20000)
...
DELETE FROM IN(1,2,3,...1000000)
$sql = " SELECT COUNT(a.cdr_id) FROM historisation.cdr_".$annee." a 
         INNER JOIN transatel.cdr_transatel_v2 b ON a.id_cdr = b.id_cdr ";
$t = $db_transatel->selectAll($sql);

//The number of lines I have to delete
$i = $t[0][0];

//set starting index
$previous = 0;

do {

    if ($i < $limit) {
        $limit = $i;
    }

    $selectFromHistoryAndDelete = 'DELETE d
FROM transatel.cdr_transatel_v2 AS d
JOIN (
   SELECT @previous := cdr_id AS cdr_id
   FROM historisation.cdr_2017 
   WHERE cdr_id > ' . $previous . '
   ORDER BY cdr_id
   LIMIT 10000
) AS a
ON a.cdr_id = d.cdr_id';

    $db_transatel->exec($selectFromHistoryAndDelete, $params);

    //retrieve last id selected in cdr_2017 to use in next iteration
    $v = $db_transatel->selectAll('SELECT @previous'); //prefer fetchColumn
    $previous = $v[0][0];

    $i = $i - $limit;

} while ($i > 0);

//optionally reclaim table-space
$db_transatel->exec('OPTIMIZE TABLE transatel.cdr_transatel_v2', $params);
#ensure the storage table doesn't exist already
DROP TABLE IF EXISTS cdr_transatel_temp;

#duplicate the structure of the original table
CREATE TABLE transatel.cdr_transatel_temp 
LIKE transatel.cdr_transatel_v2;

#copy the records that are not to be deleted from the original table
INSERT transatel.cdr_transatel_temp
SELECT * 
FROM transatel.cdr_transatel_v2 AS d
LEFT JOIN historisation.cdr_2017 AS b
ON b.cdr_id = d.cdr_id
WHERE b.cdr_id IS NULL;

#replace the original table with the storage table
RENAME TABLE transatel.cdr_transatel_v2 to transatel.backup, 
    transatel.cdr_transatel_temp to cdr_transatel_v2;

#remove the original table
DROP TABLE transatel.backup;