如何在codeigniter中插入除id之外的唯一表数据?

时间:2014-01-18 13:22:07

标签: php mysql codeigniter

如何在mysql中插入唯一行? id和userid都是不同的列。 我设置的id是唯一的。但是不应该重复用户ID和签入列。 这可能吗?

if($this->dx_auth->is_logged_in()){
    $insertData['userid']     = $this->dx_auth->get_user_id();
    $insertData['checkin']    = $checkin;
    $insertData['checkout']   = $checkout;
    $insertData['location']   = $location;
    $insertData['guest']      = $nof_guest;
    $id = $this->dx_auth->get_user_id();
    $result = $this->Common_model->getTableData('searchlist', array("userid" => $id));
    if($result->num_rows > 4){
        $res = $result->result();
        $del_id = $res[0]->id;
        $conditions = array("id" => $del_id);
        $this->Common_model->deleteTableData('searchlist', $conditions);
    } 
    if($location != "0"){
    $this->Common_model->inserTableData('searchlist', $insertData);}}

2 个答案:

答案 0 :(得分:0)

在这种情况下,您可以将useridcheckin列作为复合主键。如果您愿意,仍然可以使用id作为主键,并为其他2个列组合创建唯一索引。

在插入可能导致MySQL错误的新组合之前,您还应该检查记录是否存在。

干杯!

答案 1 :(得分:0)

您可以将id作为主键并自动增加用户表格。

然后,您必须为useridcheckin创建组合唯一键。

CREATE UNIQUE INDEX user_checkin_time ON searchlist (userid, checkin);

在控制器中,您必须在插入/更新之前验证用户ID并签入。

$isExist = $this->Common_model->getTableData('searchlist', array("userid" => $id,"checkin"=>$checkin));
if($isExist->num_rows()>0)
{
  // throw error message as checkin time already exist
}
else
{
   // continue with further code
}