如果product_id的ip_address不存在,我想插入到同一个表中,但最好不要创建两个单独的查询。我怎样才能做到这一点?
下面是示例表:
id | product_id | ip_address |
------------------------------
a 11112 8.8.8.8
b 11234 9.9.9.9我的代码是这样的,但它不能工作。
INSERT INTO `'._DB_PREFIX_.'views`
(SELECT '.$id_product.',"'.$ip_addr.'"
FROM `'._DB_PREFIX_.'views`
WHERE NOT EXISTS (SELECT * FROM
`'._DB_PREFIX_.'views` v WHERE v.id_product ='.$id_product.' AND
t.ip_address ="'.$ip_addr.'"
))'发布于 2013-06-20 14:40:56
您可以使用INSERT IGNORE、REPLACE或INSERT ... ON DUPLICATE KEY UPDATE ...
每种方法都要求您对product_id、ip_address有一个唯一的约束
插入忽略
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')如果条目已经存在,将忽略插入。
替换
REPLACE INTO products VALUES (null, 111, '8.8.8.8')将执行delete加上新插入。
插入...更新
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()将尝试插入,如果插入失败,则更新现有记录。
在您的情况下,我认为您应该可以使用INSERT IGNORE,但是,如果您希望在记录已经存在的情况下更改其他值,INSERT ... UPDATE ...应该可以很好地工作。
我通常不推荐使用REPLACE,除非您真的想要DELETE FROM table WHERE ...加上INSERT INTO TABLE ...
更新
这需要(在本例中)组合产品ip_address的唯一索引。您可以使用以下命令来实现此目的
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);https://stackoverflow.com/questions/17206842
复制相似问题