Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Вставка и добавление записи


Автор: Aliance 4.6.2006, 01:16
Добрый вечер! Как сделать такой алгоритм:

Если запись с полем = "$переменная" уже существует в БД, то редактируем его (update), иначе добавляем (insert)

У меня в голове родилась только такая мысля: делаем запрос select *, сравниваем поле с переменной, если есть результат - то редактируем, если нет - то добавляем. Но мне почему-то кажется, что это не лучшее решение в плане производительности.

Что посоветуете?  

Автор: skyboy 4.6.2006, 09:24
Aliance, со своей колокольни вижу три варианта:
1) хранимая процедура, которая и проверит и добавит.
Достоинства - она выполняется тоже на стороне сервера, но не интерпретатором PHP, а затем - интерпретатором MySQL, а только MySQL. Немного быстрее.
Недостатки - количество кода столько же, а 5-ю версию MySQL поддерживают далеко не все хостинги.
2) триггер.
Достоинства: в отличии от процедуры будет работать при любом добавлении - не надо из PHP вызывать процедуру и помнить об этой необходимости.
Недостатки: те же, что и в п.1 - поддержка только с 5-й версии
3) Конструкция 
Код

INSERT ..... ON DUPLICATE KEY UPDATE ...

Поле "Update" может ничего не делать. Главное, чтоб на "возможно повторяющихся" полях был определён ключ. 

Автор: Mal Hack 4.6.2006, 13:28
Есть такой запрос - REPLACE, по синтаксису схож с INSERT, думаю с реализацией разберешься smile 

Автор: ASteel 4.6.2006, 13:40
Цитата(Mal Hack @  4.6.2006,  13:28 Найти цитируемый пост)
Есть такой запрос - REPLACE

REPLACE не есть хорошо, по той причине, что если есть поле autoincrement, то оно получит совершенно новое значение. Т.к. REPLACE делает 2 действия DELETE, INSERT.
 

Автор: Mal Hack 4.6.2006, 14:25
Ввиду задачи, рассматриваем момент, когда инкремента у нас нет.
В противном случае - да. Не катит. 

Автор: Aliance 4.6.2006, 15:04
У меня был инкремент, убрал его, так как без него мне даже лучше smile
Воспользуюсь советом Mal Hack

ЗЫ: PHP 4ый. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)