| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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) Конструкция
Поле "Update" может ничего не делать. Главное, чтоб на "возможно повторяющихся" полях был определён ключ. |
| Автор: Mal Hack 4.6.2006, 13:28 |
| Есть такой запрос - REPLACE, по синтаксису схож с INSERT, думаю с реализацией разберешься |
| Автор: ASteel 4.6.2006, 13:40 |
REPLACE не есть хорошо, по той причине, что если есть поле autoincrement, то оно получит совершенно новое значение. Т.к. REPLACE делает 2 действия DELETE, INSERT. |
| Автор: Mal Hack 4.6.2006, 14:25 |
| Ввиду задачи, рассматриваем момент, когда инкремента у нас нет. В противном случае - да. Не катит. |
| Автор: Aliance 4.6.2006, 15:04 |
| У меня был инкремент, убрал его, так как без него мне даже лучше Воспользуюсь советом Mal Hack ЗЫ: PHP 4ый. |