MYSQL Query help: обновление существует - PullRequest
1 голос
/ 12 ноября 2011

Я делаю ежедневный счетчик для блога, и у меня есть проблема с этим запросом:

IF EXISTS SELECT * FROM tableA WHERE blog_id=1
    UPDATE FROM tableA SET c=c+'1' WHERE blog_id='1' AND c_date=NOW()
ELSE
    INSERT INTO FROM tableA VALUES (blog_id,c,c_date) VALUES (1,1,now())

он показывает следующую ошибку:

1064 - у вас есть ошибка вваш синтаксис SQL;обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования

рядом с 'ЕСЛИ СУЩЕСТВУЕТ ВЫБОР * ИЗ ТАБЛИЦЫA ГДЕ blog_id = 1 ОБНОВЛЕНИЕ ИЗ таблицыА SET SET C = C +' 'в строке 1

My table entries should look like this :
id , blod_id , c , c_date
1 , 1001, 66 , 2011-11-11 
2 , 1001, 160 , 2011-11-12
3 , 1002, 200 , 2011-11-12
4 , 1003, 33 , 2011-11-12

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

Я подозреваю, что вы ищите синтаксис insert into on duplicate key update

Из руководства:

12.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE Синтаксис

Если вы укажете ON DUPLICATE KEY UPDATE, и будет вставлена ​​строка, которая вызовет дублирующее значение в уникальном индексе или первичном ключе, ОБНОВЛЕНИЕ старого Строка выполнена.

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Ваш запрос должен быть похож на следующий пример:

INSERT INTO tableA (blog_id,c,c_date) VALUES (1,1,now()) ON DUPLICATE KEY UPDATE `c` = `c`+1, `c_date` = NOW()

Вам нужно иметь ключ UNIQUE или PRIMARY KEY, чтобы это работало.

ALTER TABLE  `table` ADD PRIMARY KEY (  `id` )

На основе вашего примера таблицы вы можете добавить первичный ключ в столбец id или добавить уникальный составной индекс для полей (c_date, blog_id)

ALTER TABLE  `table` ADD UNIQUE (
blog_id ,
c_date
);

и используйте это:

INSERT INTO tableA (blog_id, c, c_date) 
  VALUES (1, 1, NOW()) 
ON DUPLICATE KEY UPDATE 
  c = c + 1                --- update only `c`, not any part of the unique key
1 голос
/ 12 ноября 2011

Мне кажется, что вы действительно хотите это (будьте осторожны, оно работает только с MySQL)!

...