MySql Обновите первую запись с X и Y, иначе вставьте новую запись - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть запись в чате в таблице MySql -

id (первичный ключ, автоинкремент) - идентификатор пользователя чата
user_id - идентификатор пользователя, который относится к нашему продукту
room_id - идентификатор комнаты, в которой вы находитесь

Если оператор чата входит в комнату, уходит, а затем возвращается - как сейчас - создаст в комнате две записи (INSERT INTO chatuser ...)

Я знаю INSERT, ЕСЛИ НЕ СУЩЕСТВУЕТ синтаксис, однако я хочу, чтобы ЕСЛИ НЕ СУЩЕСТВУЕТ не по первичному ключу, а ГДЕ user_id = x AND room_id = y (что будет тем же, если они повторно войдут в комнату, в которой они были )

что-то наподобие INSERT INTO chatuser SET user_id = 4, room_id = 2 ЕСЛИ ЗАПИСЬ НЕ СУЩЕСТВУЕТ С ЭТИМИ ЗНАЧЕНИЯМИ УЖЕ;)

спасибо

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Я думаю, что у нас есть проблема дизайна. У вас есть 3 таблицы, пользовательская таблица, таблица комнат и таблица, которая связывает эти две таблицы. Последнее, с чем мы здесь работаем. Теперь, если вы хотите регистрироваться каждый раз, когда пользователь входит в комнату, ваш дизайн стола идеален. Однако кажется, что это не то, что вы делаете. Кажется, вы хотите запись только для последнего визита. В этом случае ваша таблица не должна иметь первичного ключа с автоинкрементом, а вместо этого должна иметь идентификаторы userID и roomID, которые являются частями первичного ключа из нескольких столбцов.

Измените вашу таблицу на эту настройку, затем запустите оператор вставки с предложением ON DUPLICATE KEY UPDATE.

0 голосов
/ 22 сентября 2011

Если у вас есть уникальный индекс (user_id, room_id), вы можете сделать INSERT ... ON DUPLICATE KEY UPDATE (или INSERT IGNORE, если вам не нужно ничего обновлять, когда запись уже существует):

INSERT INTO table_1 (user_id, room_id, enter_date)
VALUES  (1,1, NOW())
ON DUPLICATE KEY UPDATE
enter_date = NOW()

// or
INSERT IGNORE INTO table_1 (user_id, room_id)
VALUES (1,1)
...