Добавить запись если не существует.
Подскажите лучший вариант реализации такого сабжа, есть ли возможность записать это в один запрос, а не делать сначала select а потом insert или update (MySQL)?
|
Ответ: Добавить запись если не существует.
http://dev.mysql.com/doc/refman/5.0/...duplicate.html
Например: Код:
INSERT INTO users |
Ответ: Добавить запись если не существует.
Код:
INSERT IGNORE INTO table Копипаст от сюда: http://stackoverflow.com/questions/1...xists-in-mysql |
Ответ: Добавить запись если не существует.
А если не знаешь primary key?
|
Ответ: Добавить запись если не существует.
А как ты собирался проверить что запись уже существует?
UPD Если например у тебя таблица с аккаунтами [id(primary), email(unique), name, pass, ...], и ты проверяешь по email'у, получается у тебя email - это Unique значение. Пометь его в mysql как Unique, и затем при INSERT IGNORE возникнет коллизия по полю email, и оно вставлено не будет. |
Ответ: Добавить запись если не существует.
У меня таблица параметров игрока, уникальна связка id игрока и id параметра, есть еще id записи. Получается надо создать связанный ключ из первых двух, а id записи выкинуть?
UPD: т.е. примерно такая таблица: |
Ответ: Добавить запись если не существует.
Первая ID игрока - индексированная. Т.к. ты будешь часто по этому данному часто искать. ID параметра - тут можно уже не индексировать, главное в поиске искать сперва ID игрока, а потом уже по параметру. А вот третья колонка - уникальный Primary Key, по которому если тебе нужно получить конкретный параметр ты будешь иметь возможность сразу найти. Он состоит из ID игрока + ID параметра. Например: 123_456 Где 123 - ID игрока, и 456 - ID параметра. Таким образом у тебя есть уникальный адрес на каждый параметр для любого игрока. Быстрый доступ - и точка коллизии для вставки используя IGNORE атрибут. Всё правильно ниже. |
Ответ: Добавить запись если не существует.
Т.е. так не норм?
PHP код:
|
Ответ: Добавить запись если не существует.
Если нету записи - вставит, если есть, обновит значение, прибавив к прошлому новое.
|
Ответ: Добавить запись если не существует.
по user будет поиск медленный с таким ключем? типа select * from user_params where user= :user
|
Ответ: Добавить запись если не существует.
Цитата:
Будет шустро по первому индексу. Или по обоим, но не по правым. |
Ответ: Добавить запись если не существует.
Значит мне подходит, спасибо.
|
Ответ: Добавить запись если не существует.
Я тоже кое-что выучил..
|
Ответ: Добавить запись если не существует.
Такой запрос тоже нормально должен сработать ведь?
PHP код:
|
Ответ: Добавить запись если не существует.
Будет искать по user да, индекс сработает. Но учти что JOIN вернёт только если будет совмещение.
Например если есть запись в user_params а записи в parameters нету (по id как ты соединяешь), то JOIN ничего не возвратит. Твой запрос возвратит все параметры определённого юзверя. |
Часовой пояс GMT +4, время: 08:45. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot