页面视图表:我只想要每页每个ip一行,但只能有一个主键.我该怎么解决这个问题


Page view table: I only want one row per ip per page, but can only have one primary key. How do I get around this?

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

我需要这两个都是键,因为它是ip和页面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字段应该被覆盖。

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

CREATE TABLE(...,
PRIMARY KEY(page_id, ip));

另一个选择是:

插入表(user_ip,page_id)选择*FROM(选择inserted_user_ip,inserted_page_id)为tmp其中不存在(从表中选择user_id,page_id)极限1;

向表添加唯一键

ALTER TABLE table_name add unique key(ip_address,page_id);