PHP:从900条记录中每隔15条记录执行一次



我为每个循环准备了大约900条来自DB的记录。已设置最长执行时间。现在,我希望每次都检查15条记录,执行的记录应该保存在同一表的另一列中。

但我如何在下一次迭代中获得另一批15条记录,它应该检查";检查单词";,如果记录存在于";检查单词";则不应再次迭代。(第一个循环:1-15,然后第二个循环:16-20(

示例:

my_db 
----------------------------------------------------------------------------
id   | words                   | email      | checked_words
-----------------------------------------------------------------------------------
1   |  a,b,c,d,e,f,g,h.......   | example@example.com |

如果"a"被迭代,那么:

my_db 
----------------------------------------------------------------------------
id   | words                   | email      | checked_words
-----------------------------------------------------------------------------------
1   |  b,c,d,e,f,g,h.......   | example@example.com |a

到目前为止,我已经尝试过:

$flag = 0;

foreach($db_array as $arr){

if($flag >= 15 )
break;
$flag++;
$searched_result[] = $arr; 


}


//insert into checked_words columns

$search_words= implode (",",$searched_result);
$searched_words =insertWordresults($search_words,$db_combinations['id']); //function for inserting words


我们不需要重新发明轮子,我们有为我们做这项工作的PHP函数。在foreach中相应地执行逻辑。我给你举一个例子,每15条记录插入一个。

$result = $db->rawquery("select * from your_9000_record_table");

// Chunk Results by 15
$chunk = array_chunk($result, 15);
foreach ($chunk as $chunk_arr) {
$tmp_arr = array();
foreach ($chunk_arr as $segment) {
$tmp_arr [] = $segment;
}

$sql = "insert into checked_words (
words, email, checked_words
) values ";

$array_keys = array_keys($tmp_arr);
$last_key = end($array_keys);
foreach ($tmp_arr as $key => $data) {
if ($last_key == $key) {
$sql .= "(" . implode(",", $data) . ") ";
} else {
$sql .= "(" . implode(",", $data) . "),";
}
}
$db->rawQuery($sql);
unset($tmp_arr);
}

已延迟更新答复。

$chunk_15 = array_chunk($result, 15);
foreach ($chunk_15 as  $chunk_arr) {
// Chunk 15 records to 5
$chunk_5_arr = array_chunk($chunk_arr, 5);
foreach ($chunk_5_arr as $interval_key => $chunk) {
if($interval_key !== 0){
sleep(2);
}
// Insert 3 record in one time start ============
$tmp_arr = array();
foreach ($chunk as $segment) {
$tmp_arr [] = $segment;
}
$sql = "insert into checked_words (
words, email, checked_words
) values ";
$array_keys = array_keys($tmp_arr);
$last_key = end($array_keys);
foreach ($tmp_arr as $key => $data) {
if ($last_key == $key) {
$sql .= "(" . implode(",", $data) . ") ";
} else {
$sql .= "(" . implode(",", $data) . "),";
}
}
//your db server
$db->rawQuery($sql);
unset($tmp_arr);
// Insert 3 record in one time end ============
}
}

对于每15条记录执行的操作,您需要在计数变量中进行au模运算,如下所示:

$flag = 0;

foreach($db_array as $arr){
if( ($flag % 15) == 0 ){
// do what you want for each 15 records
}
$flag++;
}

每次到达下一个15条记录时,模15将返回0。

最新更新