2011-10-05 101 views
1
$sql = "select * from instalmentsdetails_ where studentFeeId='$savestudentfees' AND instalmentName='$instlnamefdtls'"; 
    $query = $this->db->query($sql); 
    if($query->num_rows() > 0){ 
     echo($id); 
     $this->db->where('instalmentsDetailsId',$id); 
     $this->db->update('instalmentsdetails_',$instldata);  
    }else{ 
     echo($id); 
     $id=''; 
     echo($id); 
     $sql= "INSERT INTO instalmentsdetails_` (`instalmentsDetailsId`, `studentFeeId`, `instalmentName`, `amount`, `dueDate`, `status`) VALUES ('$id', '$savestudentfees', '$instlnamefdtls', '$amtfdtls', '2011-10-06', '1')"; 
     $id=$this->db->insert_id(); 
     $query = $this->db->query($sql); 
     return $query; 
    } 
    return $id; 

该查询首先检查是否存在任何行,如果存在,它将更新旧记录,否则它将创建新记录,但由于某种原因,它甚至无法按预期工作当查询返回num_row() > 0。它是在一个笨模型任何人都可以告诉这个查询有什么问题吗?

+0

如果'if'条件为真 - 然后'if'身体不执行。根据定义。你有'num_rows <= 0'或者在代码中的其他地方插入数据。 – zerkms

回答

1

你检查的$query->num_rows()?输出,如echo $query->num_rows()

你可以做到这一点,而不是和保存PHP

ALTER TABLE teami_db ADD UNIQUE INDEX(studentFeeId, instalmentName); 
打扰

然后,您可以像这样执行ON DUPLICATE KEY UPDATE查询。

INSERT INTO `instalmentsdetails_teami` (
    `instalmentsDetailsId`, 
    `studentFeeId`, 
    `instalmentName`, 
    `amount`, 
    `dueDate`, 
    `status` 
) VALUES (
    '$id', 
    '$savestudentfees', 
    '$instlnamefdtls', 
    '$amtfdtls', 
    '2011-10-06', 
    '1' 
) ON DUPLICATE KEY UPDATE 
    `instalmentsDetailsId` = VALUES(`instalmentsDetailsId`), 
    `studentFeeId`   = VALUES(`studentFeeId`), 
    `instalmentName`  = VALUES(`instalmentName`), 
    `amount`    = VALUES(`amount`), 
    `dueDate`    = VALUES(`dueDate`), 
    `status`    = VALUES(`status`) 

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

请刷新,我已更新查询:) – Geoffrey

+0

兄的概率是,它不更新,而是创建一个新行或插入一个新行 – Ghostman

+0

它只会创建一个新的行,如果重复键不存在于数据库中,否则会更新。您必须在两列上具有UNIQUE索引。这样可以节省1个额外的查询,因为重复的密钥检查正在执行您的第一个查询所做的操作,并且保存了重复的代码,从而使其效率更高。 – Geoffrey

相关问题