Я знаю, что многие люди задавали этот вопрос раньше, но я не нашел абсолютного ответа, и я видел много разных ответов, поэтому я запутался.
Я получил следующие данные, например, в моей базе данных SQL:
user: test
code: blablah
email: [email protected]
user: zeus
code: olympus
email: [email protected]
user:test
code:123132
email: [email protected]
user:test
code:987654331
email: [email protected]
user: usa
code:1233333
email: [email protected]
Что означает, что я хочу, чтобы база данных, в этом примере, была в конце
user: zeus
code: olympus
email: [email protected]
user: usa
code:1233333
email: [email protected]
В конце я хочу убедиться, что в моей базе данных нет дублированных строк / данных. Я не хочу оставлять даже одну строку с дублированным именем пользователя, потому что «код» на самом деле является уникальным кодом, который генерируется при каждом сеансе входа в систему и уничтожает предыдущие коды, и я не могу знать, какой код является последним, потому что Я не использовал «созданную» строку с функцией date ().
Прямо сейчас я использую следующий код:
"INSERT INTO logs (user, code, email) VALUES('$user', '$code', '$email')";
Я думаю об изменении его на
INSERT INTO logs(user, code, email)VALUES($user,$code,$email)ON DUPLICATE KEY UPDATE $code=VALUES(code)
чтобы получить то, к чему я стремлюсь. Мне нужно изменить строку «пользователь» в моей базе данных для уникальной строки для этого.
Кто-то предложил мне использовать следующий код:
"UPDATE `logs` SET `code` = '$code' WHERE `user` = '$user' AND `email` = '$email'";
Но я не думаю, что это правильный путь, потому что, если я просто воспользуюсь опцией UPDATE, что произойдет с новыми пользователями, которые захотят зарегистрироваться? Их данных нет в базе данных, поэтому обновлять пока нечего, поэтому для новых пользователей будет ошибка, верно?
Большое спасибо !
для первого вопроса вы можете использовать этот запрос:
delete from logs where user IN
(SELECT * from (select user FROM logs GROUP BY user HAVING COUNT(user) > 1) tempTable);
для второго вопроса, так как у вас уже есть первичный ключ, который вы не можете использовать при обновлении дубликата ключа при user
колонка. Но вы можете использовать два запроса один за другим сначала Update
и второй insert
пытаться:
//this Update query is executed if the user is already there. If the user is not there this query will fail and php will go to next query
$query1 = update logs set code = $code where user = $user;
//This query will insert the data only if `user` is not found
$query2 = insert into logs ($user,$code,$email)
select user,code,email
from logs
where not exists (select * from user where user = $user)
limit 1;
Других решений пока нет …