在解释代码之前我必须解释数据结构
所以我有这种格式的数据
=>Department
==>Category
===>Sub-Category
有多个部门有多个类别,这些类别有子类别。
可以有多个类别同名不同部门,子类别和类别相同。
有一个包含所有数据和产品的表格。我必须以适当的方式提取数据并放入
Departments
Categories => fk is Departments id
Subcategories => fk is Categories id
首先我在部门中插入数据
然后在类别中,首先我得到了部门的 ID,然后插入到类别表中:
public function insertDataInCategory($data)
{
if(!empty($data)){
//pass data from hierarchy
foreach ($data as $dkey => $drow) {
//get id
$this->db->select('id');
$this->db->from('departments');
$this->db->WHERE('name',$dkey);
$query = $this->db->get();
//getting department it to identify category
$did = $query->result_array();
//adding category from department
foreach ($drow as $ckey => $crow) {
$cat_content = array(
'department_id' => $did[0]['id'] ,
'name' => $ckey ,
'description' => ''
);
$this->db->insert('categories', $cat_content);
}
}
}
}
在子类别中,首先我必须获取类别的部门 ID,然后我确定该子类别属于该类别。 因此,此处运行的 3 个查询正在增加执行时间。
public function insertDataInSubcategory($data)
{
//pass data from hierarchy
if(!empty($data)){
//department foreach
foreach ($data as $dkey => $drow) {
//category each
$this->db->select('id');
$this->db->from('departments');
$this->db->WHERE('name',$dkey);
$query = $this->db->get();
//getting department it to identify category
$did = $query->result();
foreach ($drow as $ckey => $crow) {
//get id
$this->db->select('id');
$this->db->from('categories');
$this->db->WHERE('name',$ckey);
$this->db->WHERE('department_id',$did[0]->id);
$query = $this->db->get();
//getting id of category of sub-category
$cid = $query->result_array();
//sub-category foreach
foreach ($crow as $skey => $srow) {
$scat_content = array(
'category_id' => $cid[0]['id'] ,
'name' => $skey ,
'description' => ''
);
$this->db->insert('sub_categories', $scat_content);
}
}
}
}
}
insertDataInCategory 和insertDataInSubcategory 函数的使用时间急剧增加。请告诉我如何减少它的时间。以及插入表格的正确方法
最佳答案
问题是您多次运行查询,这会增加执行时间。运行单个查询将减少您的时间。
试试这个代码:
public function insertDataInCategory($data)
{
if(!empty($data)){
//pass data from hierarchy
foreach ($data as $dkey => $drow) {
//get id
//adding category from department
foreach ($drow as $ckey => $crow) {
$query = "INSERT INTO categories ";
$query.= "(department_id, name , description)";
$query.= "VALUES ((SELECT id FROM departments WHERE name = '$dkey') , '$ckey' , '')";
$this->db->query($query);
}
}
}
}
public function insertDataInSubcategory($data)
{
//pass data from hierarchy
if(!empty($data)){
//department foreach
foreach ($data as $dkey => $drow) {
foreach ($drow as $ckey => $crow) {
//sub-category foreach
foreach ($crow as $skey => $srow) {
$query = "INSERT INTO sub_categories ";
$query.= "(category_id , name , description)";
$query.= "VALUES ((SELECT id FROM categories WHERE name = '$ckey' && department_id = (SELECT id FROM departments WHERE name = '$dkey')) , '$skey' , '')";
$this->db->query($query);
}
}
}
}
}
现在只设置了一个连接,它会更快地插入记录。
关于php - 在嵌套循环中运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46989879/