我有以下表格设置
广告活动: CampaignID PK CAMPAIGNNAME
CampaignActions: CampaignActionID PK CampaignActionName
CampaignActionSubmissions: CampaignActionSubmissionID PK 用户身份 电子邮件地址 的CampaignID CampaignActionID IP地址 时间戳 UserAddress
我正在尝试仅在CampaignActionID + IPaddress和/或CampaignActionID + UserID不存在和/或CampaignActionID + EmailAddress时插入记录。
换句话说: 如果CampaignActionID +三者中的任何一个(UserID,IPAddress,EmailAddress)存在,则不要插入。
这个想法是不让人们登录,但仍然阻止他们多次完成相同的操作。 UserID存储在cookie中。 所以UserID 1用UserID A,IPAddress B,EmaiAddress C完成CampaignactionID 1 如果userID 1删除了cookie,要获得新的UserId,他的Ipaddress仍然匹配,请不要插入 如果用户ID 1使用新计算机,他的电子邮件地址仍然匹配,请勿插入。 userID是否更改IPAddress,他的UserID仍然匹配,不插入。
答案 0 :(得分:1)
我只是猜测类型,但这里有一些psydo代码:
create procedure doInsert
@camppaignActionID int,
@ipaddress varchar(50),
@userid varchar(50),
@emailaddress varchar(50),
@CampaignID int,
@userAddress varchar(50)
as
if ( not exists (select 1 from CampaignActionSubmissions where camppaignActionID = @camppaignActionID and ipaddress = @ipAddress )
and
not exists (select 1 from CampaignActionSubmissions where camppaignActionID = @camppaignActionID and userid= @userid)
and
not exists (select 1 from CampaignActionSubmissions where camppaignActionID = @camppaignActionID and emailaddress = @emailaddress ) )
begin
insert into CampaignActionSubmissions ( EmailAddress, CampaignID, CampaignActionID, IPaddress, Timestamp, UserAddress )
values ( @emailaddress, @campaignID, @campaignActionId, @ipaddress, getdate(), @userAddress)
end