mysql
中的问题
我的表名是categories
。
CREATE TABLE IF NOT EXISTS `categories` (
`cid` int(10) NOT NULL AUTO_INCREMENT,
`category_name` char(100) DEFAULT NULL,
`parent` int(10) DEFAULT NULL,
PRIMARY KEY (`cid`),
UNIQUE KEY `parent` (`parent`,`category_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
parent
和category_name
是唯一字段。
如果记录不存在,我想运行insert into command。;
select last_insert_id() #get last insert id.
UPDATE
我的PHP代码是:
$sql = "insert into categories (parent,category_name) values ('".$field[parent]."','".$temp->cat_name."')";
if (@$db->query($sql)){
$cid = $db->get_var("select last_insert_id()");
}else{
$cid = $db->get_var("SELECT cid FROM categories WHERE parent=".$field[parent]." and category_name='".$temp->cat_name."'");
}
如何才能获得存在的id返回?
答案 0 :(得分:1)
如果记录不存在,我想运行insert into command。;
您可以使用INSERT IGNORE ....
INSERT IGNORE INTO `categories` ( `category_name`, `parent` ) values ('A', 1); // will insert it
INSERT IGNORE INTO `categories` ( `category_name`, `parent` ) values ('A', 1); // will ignore it
INSERT IGNORE INTO `categories` ( `category_name`, `parent` ) values ('A', 2); // will insert it
INSERT IGNORE INTO `categories` ( `category_name`, `parent` ) values ('B', 2); // will insert it
INSERT IGNORE INTO `categories` ( `category_name`, `parent` ) values ('B', 2); // will ignore it
来自the docs:
如果使用
IGNORE
关键字,则执行INSERT
语句时发生的错误将被视为警告。例如,如果没有IGNORE
,则复制表中现有UNIQUE
索引或PRIMARY KEY
值的行会导致重复键错误,并且语句将中止。使用IGNORE
时,仍未插入行,但未发出错误。
答案 1 :(得分:0)
select last_insert_id()
成功插入后返回ID
。为了进一步处理,您可以在成功插入后将其存储在数据库中。
您也可以使用insert ignore into ....
来避免重复插入
答案 2 :(得分:0)
我认为这是最好的方法:
$sql = "insert into categories (parent, category_name) values ('".$field[parent]."','".$temp->cat_name."') ON DUPLICATE KEY UPDATE cid=LAST_INSERT_ID(cid)";
$db->query($sql);
$cid = $db->insert_id;
var_dump($cid);