0

我正在使用一个表格来存储不同用户在不同投票中的投票。

表具有以下结构。

编号 | poll_id | 选择 | IP地址

id : 自动递增

poll_id : (STRING UNIQUE) 对特定投票是唯一的  

opt : (STRING) 用户选择的选项    

ip_address: (STRING UNIQUE) 用户的ip地址

这是我的查询

INSERT OR REPLACE INTO tbl_poll(id,poll_id,opt,ip_addr) VALUES (null,'$poll_id','$opt','$ip_addr')

(Here $poll_id, $opt and $ip_addr are php variables which holds the respective values)

现在,场景是这样的,

用户 'A' 投票给 poll_id 'mypoll' 的选项 2。查询完美运行。(插入)

用户 'A' 改变主意并投票支持 poll_id 'mypoll' 的选项 5。查询完美运行。(替换)

但是,如果用户“A”投票支持 poll_id 'yourpoll' 的选项 4。 查询失败(它进行了替换),但它应该插入一条带有 poll_id 'yourpoll' 的新记录

我认为,它只考虑unqiue约束ip_address而不考虑poll_id

4

2 回答 2

2

从您对所需功能的描述来看,您似乎想要poll_idip_address成为一个独特的对复合独特的

CREATE TABLE tbl_poll ( 
    id         INTEGER PRIMARY KEY AUTOINCREMENT,
    poll_id    STRING NOT NULL,
    ip_address STRING NOT NULL,
    opt        STRING NULL,
    CONSTRAINT 'unique_vote_per_poll_per_ip_address' UNIQUE ( poll_id, ip_address )  ON CONFLICT REPLACE 
);
于 2012-06-10T21:00:34.013 回答
1

不,这是正确的行为。您对 有一个UNIQUE约束ip_address,因此您可能没有两条相同的记录ip_address。把你的UNIQUE约束放在这对(poll_id, ip_address)上。

于 2012-06-10T21:02:09.673 回答