我正在寻找一种方法来获得使用查询从数据库获取数据的最佳性能,我的主要问题是,通过执行下一个查询示例,它会给我一个可以解决的错误Message: preg_match(): Compilation failed: regular expression is too large at offset 44123
将PCRE library backtracking limit options
添加到php,ini
。
它将解决我的服务器/托管上的问题,但如果许多用户将使用它将解决其他问题。
我的查询非常简单:
我有一个5k行的数组:
$data = array(
array('product_id' => 1),
array('product_id' => 2),
++ 4998
);
我需要做一个foreach来获取产品ID并向数据库询问它并插入一些数据(如果存在)如果不存在它会返回不存在的product_id,所以我将它存储在一个数组中。
//Controller Method
function test(){
foreach($data as $row){
$exist[] = $this->Model->AskDatabase($row->product_id);
}
if($exist){
$getExistents = $exist;
}
if(!$getExistents == null){
//And here is where the error is produced "regular expression is too large"
$this->db->select('*')->from('products_2')->where_in('product_id', $getExistents)-get();
}
}
//Model Method
function AskDatabase($product_id){
$exist = $this->db->select('id')->from('products')->where('product_id', $row->product_id)-get();
if($exist->num_rows() > 0 ){
return $exist->row()->id;
}else{
return false;
}
}
最好使用'where'条件再次执行foreach循环而不是where_in?还是有另一种方法可以在执行查询时获得更好的性能?
感谢任何帮助!