如何在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);}}
答案 0 :(得分:0)
在这种情况下,您可以将userid
和checkin
列作为复合主键。如果您愿意,仍然可以使用id
作为主键,并为其他2个列组合创建唯一索引。
在插入可能导致MySQL错误的新组合之前,您还应该检查记录是否存在。
干杯!
答案 1 :(得分:0)
您可以将id
作为主键并自动增加用户表格。
然后,您必须为userid
和checkin
创建组合唯一键。
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
}