我有一个查询,我想检查是否有2列与相同的数据,如果是这样不添加数据,我将详细说明。
这是我的问题
INSERT INTO " . TABLE_PREFIX . "installs (
username,userid,email,addontitle,addonversion,bburl,bbtitle,webmasteremail,cookie,dateline
) VALUES (
'$username','$userid','$email','$addontitle','$addonversion','$bburl','$bbtitle','$webmasteremail','$cookie',NOW()
)
我想检查bburl和addontitle是否匹配正在提交的条目,如果匹配,则不要添加该条目。 让我们添加一些示例条目
1 --- test@test.com --- Addon --- 1.2 --- test.com --- test --- admin@test.com --- 1 --- ????????
1 --- test@test.com --- Addon2 --- 1.2 --- test.com --- test --- admin@test.com --- 1 --- ????????
1 --- test@test.com --- Addon --- 1.2 --- test2.com --- test --- admin@test.com --- 1 --- ????????
所有这些条目都将相加,但现在我们得到另一个条目:
1 --- test@test.com --- Addon --- 1.3 --- test2.com --- test --- admin@test.com --- 1 --- ????????
test2.com已经安装了Addon,所以我不想添加这个条目。 我该如何防止这种情况呢?
作为一个单独的问题。 如果您注意到我不想要的请求条目,似乎test2.com只是在更新产品,有没有一种方法可以修改现有值并更新已更改的内容?
您可以对希望唯一的列创建唯一索引/约束:
alter table t add constraint unq_t_bburl_addontitle unique t(bburl, addontitle)
然后在表上插入将生成一个错误。 可以使用在重复密钥更新时
避免错误:
insert into t ( . . . )
values ( . . . )
on duplicate key update bburl = values(bburl);
更新
不执行任何操作(因为值已经匹配),但这会防止代码返回错误。