Codeigniter:如果记录存在则更新记录,或者插入新记录

时间:2017-04-11 13:22:55

标签: php mysql codeigniter

在我的表中,我有四列。

  • r_id
  • id(用户ID)
  • v_id(公司ID)

我所做的就是给用户评价公司(v_id)。

假设,如果用户1对第一公司(v_id)进行评级,则当相同的用户评价同一公司然后评价栏自动更新时。如果用户想要评价另一家公司,那么将在表格中添加新行。但就我而言  当同一用户再次对公司评级时,则在表中插入新行。

模型

我不知道我在这个模型中做错了什么。

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);
        }

2 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。这些简单的改变应该可以胜任。

<强>模型

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);
}

答案 1 :(得分:0)

You have putted static value of v_id column try by replacing v_id ="2" with v_id = "'.$v_id.'" hope this will help you.
<?php
function ratings($insert,$id,$update,$v_id) {

        $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);
        }
    }