У меня есть сервер, который при входе в систему регистрирует их userID, IP, и, если IP уже существует в базе данных, он добавляет вхождение рядом с их IP и userID, как показано ниже. Дубликат ключа в настоящее время на UserID. Если я не ставлю ключ, то вместо того, чтобы обнаруживать, что строка с таким IP-адресом или идентификатором пользователя уже существует, она создает новую строку для каждого входа в систему, что вызывает много проблем.
Я попытался поставить дубликат ключа на IP, но если пользователь обращается к серверу с тем же IP-адресом, но с другим идентификатором пользователя, это добавит вхождение к IP-адресу исходного пользователя, так как IP-адрес уже существует и новый Идентификатор пользователя не будет добавлен в базу данных.
Структура таблицы:
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])
Мой обнадеживающий результат заключается в том, что он регистрирует каждый новый IP-адрес с соответствующим идентификатором пользователя, но если старый пользователь входит в систему с этим IP-адресом, он добавляет его как событие.
Спасибо!