[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySQL SELECT & INSERT & UPDATE
Renden
Доброго утра) Хотел спросить, надо сделать INSERT если такой записи не существует, а если существует сделать UPDATE. Шерстил инет, чето такой функции не нашел, а делать сначала SELECT WHERE потом в зависимости выполнился или не выполнился запрос делать INSERT или UPDATE, конечно можно, но как-то странно mysql уже фигову тучу лет существует, неужели нет функции которая добавляет значение если строки нет, а если есть обновляет эту строку?
zeron
ты бы слишком не фантазировал:) Будь проще:)
sergeiss
Renden - а ты не пробовал открыть и почитать хэлп по mysql?
Я с ним не работаю, и то знаю о существовании такой конструкции:
INSERT .... ON DUPLICATE KEY UPDATE


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Renden
sergeiss
Ну а я не знал:) Спасибо.
PS да я читал хелп, на mysql.ru там оформление глаза сломаешь, и фиг че найдешь, а нормальные справочники тока на ингл.
Сергей66628
а зачем мудрить и искать какие то другие изощренные возможности...проверить наличие выборкой SELECT WHERE это пара строчек...

можно написать что нибудь такое...небольшая проверка...и потом только вставлять её и все

переменную для записи создаешь...допустим name
и дальше её проверяешь...первые три строчки можно конечно убрать если
уверен в правильности символов....
function add_check(){
$this->name = addslashes($this->in_cat_name);
if(strlen($this->name) == 0) return($err);
if(strlen($this->name) > 50) return($err);

$this->sql_res = "SELECT id FROM tbl WHERE name = '".$this->name."'";
$this->sql_execute();//обрабатываем запрос функцией
if($this->sql_err) return($err);// если в процессе обработки произошли ошибки данная проверка возвратит строку ошибки
if(mysql_num_rows($this->sql_res))return($err);// если true возвращает значит строчка есть
return(0);
}


Renden
Сергей66628
Зачем искать возможности?) Ты знаешь, я тоже сначала так думал, и у меня в 1 сайтиге было порядка 5 запросов, и еще куча php кода который их разбирал приводил в нужный формат и тп, а потом я начал листать доку, и наткнулся что mysql может сделать больше половины того чего мне надо 1-2 запросами и практически без разбора его php кодом, он сам может приводить в нужный формат, выполнять условия и тп.

sergeiss
Что-то я непонял, немного

INSERT INTO events (user_id,event_date) VALUES (1,'1950-05-31') ON DUPLICATE KEY UPDATE event_date='2010-05-31'

Всеравно добавляет новые с годом 1950 а не обвновляет на 2010 значение user_id вроде уникально же.

А все, нельзя 2 примари, задал unique - получилось, спс.
Сергей66628
хм...интересно...нужно посмотреть...может и правда так проще...)))
linker
user_id - должен стоять уникальный индекс + автоинкремент. Чтобы сработала такая конструкция, в таблице должен существовать пользователь со значением user_id = 1.

_____________
Gear Framework
Gear Framework на Github
Snus
Renden
Либо ставь UNIQUE на event_date
Trianon
Больше скажу, таким оператором (INSERT ... ON DUPLICATE KEY UPDATE ...) можно изменять / добавлять не только одну, но и сразу несколько строк таблицы - для разных значений уникального/первичного ключа.
При модификации списков очень удобно.
linker
Trianon
А можно подробнее?

_____________
Gear Framework
Gear Framework на Github
Trianon
допустим, первичный (уникальный) ключ на поле barcode:

INSERT INTO goods (barcode, name, price) VALUES 
('6936614700897', 'Желтый полосатик, рыбка Дальпик', 79.90),
(
'4602547000206', 'Крем сливочный 15% Пискаревский', 22.20),
(
'4600687003750', 'Ситро Экстра, лимонад 2л.', 49.90)
ON DUPLICATE KEY UPDATE name=VALUES(name), price=VALUES(price), seq=seq+1;


недостающие строки будут добавлены, имеющиеся - обновлены по полям name , price, seq (первые два из списка значений в разделе VALUES, последнее - явным выражением в UPDATE)
linker
Trianon
Да, не сообразил smile.gif

_____________
Gear Framework
Gear Framework на Github
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.