Reputation: 3
I have the following table setup
Campaigns: CampaignID PK CampaignName
CampaignActions: CampaignActionID PK CampaignActionName
CampaignActionSubmissions: CampaignActionSubmissionID PK UserID EmailAddress CampaignID CampaignActionID IPaddress Timestamp UserAddress
I am trying to insert a record only if The CampaignActionID + IPaddress and/or CampaignActionID + UserID does not exist and/or CampaignActionID + EmailAddress.
in other words: If CampaignActionID + any of the three (UserID, IPAddress, EmailAddress) exists, then do not insert.
The idea is to not make people log in, but to still prevent them from completing the same action multiple times. UserID is stored in a cookie. so UserID 1 completes CampaignactionID 1 with UserID A, IPAddress B, EmaiAddress C If userID 1 deletes cookies, to get new UserId, his Ipaddress still matches, do not insert If userID 1 uses new computer, his emailaddress still matches, do not insert. Is userID changes IPAddress, his UserID still matches, do not insert.
Upvotes: 0
Views: 36
Reputation: 15958
I am just guessing at types but here's some psydo code:
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
Upvotes: 1