我为每个循环准备了大约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。