我正在尝试为区域明智的消息阻止编写MVC。就像用户检查他们想要获取消息的区域复选框一样,同时取消选中他们不希望获得消息的区域复选框。用户的此复选框选项的详细信息存储在“geo”表中,其中包含user_id和区域代码,如in_p1,in_p2,... upto in_p17。例如如果用户希望来自该特定区域的消息,则db中的in_p1字段应为1,否则in_p1应为0以避免来自该区域的消息,区域in_p2 tp in_p17中的逻辑相同。 在个别表中,“in_pays”是1到17之间的区域ID。我当前的MVC代码在本地主机上工作正常,但在实际站点上,因为db已经为每个区域提供了超过5百万的用户。 所以你们可以帮助我避免foreach循环中的查询,以便我可以避免数百万次查询的运行吗?我的MVC代码是
我的控制器
$geo_arr=$this->settingmodel->get_geotable();
//echo '<br><pre>'; print_r($geo_arr); echo '</pre>';
foreach($geo_arr as $geo)
{
for($count=1;$count<18;$count++)
{
$in_p='in_p'.$count; //in_p1,in_p2..in_p17 is column name in `geo` table
if($geo->$in_p==1) // e.g. if in_p1=1 then messages from area code 1 is allowed
{
$this->settingmodel->unblock_messages($in_pays=$count);
}
else //e.g. if in_p1!=1 then messages from area code 1 is not allowed
{
$this->settingmodel->block_message($in_pays=$count);
}
}
}
我的模特
function unblock_messages($in_pays)
{
$login_user=$this->session->userdata('in_pseudo');
$this->db->select('in_pseudo');
$this->db->from('individu');
$this->db->where('in_pays',$in_pays);
$query=$this->db->get();
$result=$query->result();
foreach($result as $res)
{
$me_from=$res->in_pseudo;
$arr=array('ME_VALID'=>'NULL');
$this->db->where('ME_FROM',$me_from);
$this->db->where('ME_TO',$login_user);
$this->db->update('message',$arr);
}
}
function block_message($in_pays)
{
$login_user=$this->session->userdata('in_pseudo');
$this->db->select('in_pseudo');
$this->db->from('individu');
$this->db->where('in_pays',$in_pays);
$query=$this->db->get();
$result=$query->result();
foreach($result as $res)
{
$me_from=$res->in_pseudo;
$arr=array('ME_VALID'=>'X');
$this->db->where('ME_FROM',$me_from);
$this->db->where('ME_TO',$login_user);
$this->db->update('message',$arr);
}
}
function get_geotable()
{
$in_num=$this->session->userdata('in_num');
$this->db->select('in_p1,in_p2,in_p3,in_p4,in_p5,in_p6,in_p7,in_p8,in_p9,in_p10,in_p11,in_p12,in_p13,in_p14,in_p15,in_p16,in_p17');
$this->db->from('geo');
$this->db->where('in_num',$in_num);
$query=$this->db->get();
$result=$query->result();
return $result;
}