Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка и добавление записи 
:(
    Опции темы
Aliance
Дата 4.6.2006, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Добрый вечер! Как сделать такой алгоритм:

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

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

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

Это сообщение отредактировал(а) Aliance - 4.6.2006, 01:17
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 4.6.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



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

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

Поле "Update" может ничего не делать. Главное, чтоб на "возможно повторяющихся" полях был определён ключ. 
PM MAIL   Вверх
Mal Hack
Дата 4.6.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Есть такой запрос - REPLACE, по синтаксису схож с INSERT, думаю с реализацией разберешься smile 
PM ICQ   Вверх
ASteel
Дата 4.6.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.5.2006
Где: Krasnodar, Russia

Репутация: нет
Всего: 1



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

REPLACE не есть хорошо, по той причине, что если есть поле autoincrement, то оно получит совершенно новое значение. Т.к. REPLACE делает 2 действия DELETE, INSERT.
 
PM MAIL WWW   Вверх
Mal Hack
Дата 4.6.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Ввиду задачи, рассматриваем момент, когда инкремента у нас нет.
В противном случае - да. Не катит. 
PM ICQ   Вверх
Aliance
Дата 4.6.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



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

ЗЫ: PHP 4ый. 

Это сообщение отредактировал(а) Aliance - 4.6.2006, 19:00
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.