#php #mysql #database
#php #mysql #База данных
Вопрос:
Я хочу вставить новую запись в таблицу MySQL, но ее следует вставлять только в том случае, если еще нет записи с тем же идентификатором пользователя. Кроме того, я хочу получить возвращаемое логическое значение, которое показывает, была ли вставлена новая запись или нет.
The table
like_id | user_id | post_id
1 | 1 | 3
2 | 5 | 3
3 | 12 | 5
Примеры
Этот запрос INSERT INTO blog_post_likes (post_id, user_id) VALUES (3, 1)
должен вернуть ‘false’/’0’ / или что-то еще с тем же значением, потому что уже есть запись с тем же идентификатором пользователя. Но этот запрос INSERT INTO blog_post_likes (post_id, user_id) VALUES (3, 34)
должен возвращать ‘true’/1/ или что-то еще с тем же значением, потому что была вставлена новая запись.
Как я могу это сделать?
Ответ №1:
Вы должны создать уникальное ОГРАНИЧЕНИЕ в столбце, который вы хотите сделать уникальным. В этом случае мы указываем в столбце user_id..
КОМАНДА SQL:
CREATE TABLE blog_post_likes
(
post_id INT,
like_id INT,
user_id INT NOT NULL UNIQUE,
)
Конечно, вы можете изменить существующую таблицу, чтобы избежать потери существующих данных в вашей таблице.
ALTER TABLE blog_post_likes ADD CONSTRAINT user_id UNIQUE (user_id)
Комментарии:
1. Я не думаю, что это сработает, потому что пользователю могут нравиться разные сообщения. Вы понимаете, что я имею в виду?
2. @KingOfDog Но пользователю может понравиться только 1 сообщение, верно? Тогда этот вариант правильный, потому что пользователь может поставить лайк только один раз за публикацию. Вы можете опустить like_id, поскольку это бесполезно.
3. Как сказал @Perry, пользователь может сделать только 1 лайк для каждого поста таким образом .. в противном случае вам не нужно делать его уникальным, но тогда пользователь может сделать несколько лайков для одного и того же поста .. я думаю, это то, что вы хотите предотвратить..
4. @Perry Теперь я удалил столбец like_id и создал первичные ключи post_id и user_id. Это работает.
Ответ №2:
Вы должны определить оба столбца как первичный ключ. Таким образом, если вы вставляете ту же запись, MySQL должен вернуть ошибку «Дублирующая запись». Вы должны проверить наличие кода ошибки 1062, как указано здесь:
https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html
Ответ №3:
Перед вставкой данных используйте
SELECT * FROM blog_post_likes WHERE post_id=give_postid AND user_id=give_userid;
Если выполнение этого запроса возвращает строку, это означает, что пользователю уже понравился этот пост. Поэтому не выполняйте запрос insert.
Если строка не возвращается, выполните запрос Insert.
Вы можете использовать mysqli_num_rows()
, чтобы найти количество возвращаемых строк.