INSERT при невозможности UPDATE в базу.

InventOR^ULG

Новичок
INSERT при невозможности UPDATE в базу.

хочется странного...
знаю что в принципе возможно, но не знаю стоит ли это делать.....

а дело вот в чем...
имеем запрос в базу вида:
PHP:
update sites set bytesin=bytesin+1 where host='sitename.ru' and date=date_format(now(),"%Y-%m-%d") and id='1';
он срабатывает если в базе есть уже запись с данным полем, если же нету, то хочется чтобы сам SQL дал команду вида:
PHP:
insert into sites (bytesin,host,date,id) values ('1','sitename.ru',date_format(now(),"%Y-%m-%d"),'1');
и тут возникает вопрос: а как?
по идее должна срабатывать конструкция:
PHP:
select case when (select count(*) from sites where .....)>0 then (update .......) else (insert .....) end;
пробовал - не получается... может что подскажут профи?
или при интенсивных запросах есть шанс что мускул ляжет?

есть конечно вариант не такой жестокий, но хотелось бы именно этот...
 

ForJest

- свежая кровь
Единственный вариант проверять [m]mysql_affected_rows[/m] после выполнения запроса на update. Если 0 - то вставлять.
Опять же следует учесть, что если ты не меняешь данные, то mysql_affected_rows вернёт 0.
 

InventOR^ULG

Новичок
тут вот советуют: http://dev.mysql.com/doc/mysql/en/INSERT.html

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

Or:

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

но на 4.0.16 не факт что заработает...
 

Апельсин

Оранжевое создание
> но на 4.0.16 не факт что заработает...

в документации написано в скакой версии это заработает.
 
Сверху