Php Codeigniter:如果存在记录,则更新记录,然后插入新记录
在我的表中有四列Php Codeigniter:如果存在记录,则更新记录,然后插入新记录,php,mysql,codeigniter,Php,Mysql,Codeigniter,在我的表中有四列 注册号 id(用户id) v_id(公司id) 比率 我所做的只是根据用户对公司(v_id)进行评分 假设,如果用户一为第一家公司(v_id)评分,同样,当同一用户为同一家公司评分时,费率列自动更新。如果user one希望对另一家公司进行评级,则会在表中添加新行。但就我而言 当同一用户再次对公司进行评分时,将在表中插入新行 型号 function ratings($data, $id, $v_id) { $query = $this->db->quer
- 注册号
- id(用户id)
- v_id(公司id)
- 比率
function ratings($data, $id, $v_id)
{
$query = $this->db->query("select r_id from user_ratings where id = $id and v_id = $v_id");
if($query->num_rows() > 0)
{
$data['r_id'] = $query->row()->r_id;
return $this->db
->where('id', $id)
->where('v_id', $v_id)
->update('user_ratings', $data);
}
else
{
return $this->db->insert('user_ratings', $data);
}
}
我不知道我在这个模型中哪里做错了
function ratings($insert,$id,$update,$v_id) {
// $this->db->where('id',$id);
// $this->db->where('v_id',$v_id);
// $run = $this->db->get('user_ratings');
// if ($run->num_rows() >= 1) {
// $this->db->where('id',$id);
// $this->db->update('user_ratings',$update);
// }else {
// // $this->db->set('user_id', $id);
// $this->db->insert('user_ratings',$insert);
// }
$query = $this->db->query('select id, v_id from user_ratings where id = "'.$id.'" and v_id = "'.$v_id.'"')->num_rows();
if ($query > 0) {
$this->db->query('update user_ratings set rate ="'.$update.'" where id = "'.$id.'"');
}else {
$this->db->insert('user_ratings',$insert);
}
}
控制器
function ratings() {
$id = $this->session->userdata('id');
$v_id = $this->uri->segment(3);
$insert= array (
'rate' => $this->input->post('click_val'),
'date' => date('Y-m-d H:i:s'),
'v_id' => $this->input->post('company_id'),
'id' => $this->input->post('id')
);
$update = array (
'rate' => $this->input->post('click_val'),
'date' => date('Y-m-d H:i:s'),
);
$this->Visa_mdl->ratings($value,$id,$update,$v_id);
}
您已经输入了v_id列的静态值,请尝试将v_id=“2”替换为v_id=“.$v_id.”希望这对您有所帮助。
你的计划是正确的。这些简单的更改应该可以完成这项工作
型号
function ratings($data, $id, $v_id)
{
$query = $this->db->query("select r_id from user_ratings where id = $id and v_id = $v_id");
if($query->num_rows() > 0)
{
$data['r_id'] = $query->row()->r_id;
return $this->db
->where('id', $id)
->where('v_id', $v_id)
->update('user_ratings', $data);
}
else
{
return $this->db->insert('user_ratings', $data);
}
}
该方法返回true或false以指示结果
您的控制器经过修改,可用于上述功能
function ratings()
{
$id = $this->session->userdata('id');
$v_id = $this->input->post('company_id');
$data = array(
'rate' => $this->input->post('click_val'),
'date' => date('Y-m-d H:i:s'),
'v_id' => $v_id,
'id' => $id
);
$this->Visa_mdl->ratings($data, $id, $v_id);
}
如果只使用未过滤的数据,为什么要使用框架?为什么不正确地使用SQL,并对EXISTS更新查询执行INSERT?以前我曾在EXISTS和UPDATE上执行INSERT,但是,正如我所问的,一个用户如何对两个不同的公司进行评级。不同等级。参数$update
中有什么?$update=array('rate'=>this->input->post('click_val'),'date'=>date('Y-m-d H:i:s')代码>我问问题时忘记删除。但它仍然对我不起作用..谢谢,为什么你要放入$this->db->query('update user_ratings set rate=“”。$update。“”where id=“”。$id.”);在“仅更新单个条件”中,但在“选择”中,您放置了两个条件$this->db->query('select id,v_id from user_ratings,其中id=“.”.$id.”和v_id=“.”.$v_id.”“),请尝试保持这两个条件不变。我需要有关代码的更多帮助。。我不知道我写代码的方式是对还是错。也许我所有的代码都能正常工作,但我不满意。。你的建议会让我很感激的。你想让我解释一下它是如何工作的吗?我也看到了我要做的一个改变——我要做吗?不,我的意思是我只想知道我的代码是否有效。我该怎么想呢。我是说我怎么知道。我是否以正确的方式编写了所有代码。因为我是codeigniter的新手。好吧,如果你得到了你想要的结果,那么它就工作了。有时候你必须尝试很多不同的方法才能让它工作。当您遇到问题时,一次编写并测试几行。以小规模构建解决方案。几乎总是有几个“正确”的答案。一旦你找到了答案,寻找用更少的代码行来做同样的事情的方法。查看他人编写的代码有助于学习有效的编码。我发现在网上回答问题是一次很好的学习经历。阅读这里回答的问题并尝试理解那里发生了什么可能是有用的。CodeIgniter框架的文档()非常好,比大多数文档要好得多。另一个优秀的学习经验是检查Codeigniter的源代码。它位于安装的系统
文件夹中。这是非常可靠的代码。阅读它是了解如何编写好代码以及如何使用框架的一个很好的方法。