0

我有一个页面查看表,每次查看页面时,用户的 ip 和页面 id 都会放在一个表中。在这张表中,我只希望每个 ip/page id 组合有一行。如果我将主键设置为 ip,那么每个 ip 只能与一个页面关联。如果我将主键设置为页面 id,那么每个页面只会关联一个 ip。

我需要这两个作为键,因为它是 ip 和 page id 的组合,不能在表中重复。我怎样才能做到这一点?

$mysqli->query("INSERT INTO page_views (ip, page_id, view_key) VALUES ('$ip', '$page_id', '$view_key') 
ON DUPLICATE KEY UPDATE page_key='$view_key'");

这就是我需要设置工作的方式 - 所以每次有人查看页面时,都会为他们分配一个 view_key,并将其放入表格中。如果已经有该 ip 查看该页面的记录,则应覆盖 view_key 字段。

4

3 回答 3

2

如果我理解正确,您需要复合主键:

CREATE TABLE(...,
PRIMARY KEY(page_id, ip));
于 2013-07-06T18:24:06.937 回答
0

您的另一个选择是:

INSERT INTO你的表user_ip, page_id)SELECT * FROM(选择insert_user_ip ,inserted_pa ​​ge_id )作为tmp WHERE NOT EXISTS(SELECT user_ip, page_id FROM your table WHERE user_id = inserted_user_id AND page_id = inserted_pa​​ge_id )限制1;

于 2013-07-06T18:32:56.667 回答
0

向表中添加唯一键

ALTER TABLE table_name add unique key(ip_address,page_id);
于 2013-07-06T18:41:25.083 回答