我设置了一个服务器,在用户登录时记录他们的userID、IP,如果IP已经存在于数据库中,它会在他们的IP和userID旁边添加一个事件,如下所示。重复键当前在UserID上。如果我没有输入键,那么它就没有检测到带有IP或UserID的行已经存在,而是为每次登录创建了一个新行,这会带来很多麻烦。
我尝试在IP上放置重复密钥,但是如果用户使用相同的IP访问服务器,但使用不同的UserID,它将向原始用户的IP添加一个事件,因为IP已经存在,新的UserID不会添加到数据库中。
表结构:
CREATE TABLE IF NOT EXISTS `ip_user` (
`userid` int(11) NOT NULL,
`ip` varchar(50) NOT NULL,
`occurencies` int(11) NOT NULL,
UNIQUE KEY `userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;查询登录:
glob.db.execute("""INSERT INTO ip_user (userid, ip, occurencies) VALUES (%s, %s, 1)
ON DUPLICATE KEY UPDATE occurencies = occurencies + 1""", [userID, ip])我希望的结果是,它会用相应的UserID记录每一个新IP,但如果老用户使用该IP登录,它将添加到相应的IP中。
谢谢!
发布于 2019-04-17 15:07:39
我不太确定我是否理解您想要的内容,但我假设您希望记录每个不同的userId和Ip对。在这种情况下,您需要的是使用userId和Ip的唯一键(不确定mysql语法,对不起):
CREATE TABLE IF NOT EXISTS `ip_user` (
`userid` int(11) NOT NULL,
`ip` varchar(50) NOT NULL,
`occurencies` int(11) NOT NULL,
UNIQUE KEY `userid_ip` (`userid`, `ip`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;编辑:另外,官方的mysql文档在这方面可能会有所帮助:https://dev.mysql.com/doc/mysql/en/multiple-column-indexes.html
https://stackoverflow.com/questions/55730652
复制相似问题