|
|
|
| есть таблица:
CREATE TABLE `r_counter` (
`operation` tinyint(1) NOT NULL default '1',
`date` date NOT NULL default '0000-00-00',
`counter` tinyint(5) NOT NULL default '0',
UNIQUE KEY `index` (`operation`,`date`)
) ENGINE=MyISAM;
|
выполняю запрос:
REPLACE INTO `r_counter` (`operation`, `date`, `counter`) VALUES (3, CURDATE(), `counter`+1)
|
создавать новые строки она создает, а вот если строка уже существует, с задаными параметрами operation и date она ее не изменяет (должна увеличивать значение counter на 1) | |
|
|
|
|
|
|
|
для: localGhost
(25.12.2007 в 05:08)
| | такс.. сейчас выяснил что проблема в запросе, а именно в моменте `counter`+1... что тут можно решить проблему? | |
|
|
|
|
|
|
|
для: localGhost
(25.12.2007 в 06:40)
| | А какое в данный момент значение counter ? | |
|
|
|
|
|
|
|
для: Faraon
(25.12.2007 в 09:24)
| | :) вопрос меня не много в тупик поставил... наданный момент 3. просто эксперементировал... когда указываешь явно значение для counter.. запрос выполняеться так как ожидаешь.. т.е. значение перезаписываеться | |
|
|
|
|
|
|
|
для: localGhost
(25.12.2007 в 09:48)
| | Если Вы пишите INSERT VALUES - вставляйте значения.
хотите вставлять выражения - пишите INSERT SELECT | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2007 в 12:56)
| | я кажеться понял вчем дело...
выдержка из мануала:
Оператор REPLACE работает точно так же, как INSERT, за исключением того, что если
старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY,
что и новая, то старая запись перед занесением новой будет удалена.
|
т.е. если строка с заданными значениями уже существует, то эта строка сначала удаляеться а потом записываються новые значения. т.е. получается в момент выполнения `counter`+1: counter не имеет установленного значения.
И как мне быть?? хотелось бы выполнить сие действие одим запросом к БД. | |
|
|
|
|
|
|
|
для: localGhost
(25.12.2007 в 14:46)
| | пробовал так:
REPLACE INTO `r_counter` (`operation`, `date`, `counter`) SELECT 3, CURDATE(), `counter`+1 FROM `r_counter` WHERE `operation` = 3 AND `date` = CURDATE()
|
Обновляет, но не вставляет (для новых значений operation/date)... думаю потому что не выполняется условие WHERE.... я в сметении/// | |
|
|
|
|
|
|
|
для: localGhost
(25.12.2007 в 15:28)
| |
INSERT INTO `r_counter` (`operation`, `date`) VALUES (3, CURDATE()) ON DUPLICATE KEY UPDATE `counter`=`counter`+1;
|
только `counter` tinyint(5) NOT NULL default '0',
исправить на `counter` tinyint(5) NOT NULL default '1', | |
|
|
|
|
|
|
|
для: MIchail1982
(25.12.2007 в 16:42)
| | Спасибо большое!!! конец моим мучениям!... хотя благодаря ним узнал кое-чего нового).
Тема закрыта. | |
|
|
|