MySQL Условная Вставка на Дубликат - PullRequest
1 голос
/ 04 января 2011

У меня есть пример таблицы с 3 полями, где adhex является первичным ключом.В настоящее время я использую ASP и набор записей, и это ОЧЕНЬ медленно, и мне нужно перейти на PHP и более быструю систему.Мне порекомендовали INSERT ... ON DUPLICATE KEY UPDATE, который прекрасно работает!

Однако я хочу, чтобы обновление было условным, и я не могу его обработать!не работает вообще!

То, что мне нужно, это обновить только обновления reg и mtime, если mtime в значениях> то, что в таблице.Я уверен, что это просто, но я не могу решить условную часть, даже глядя на некоторые примеры.

INSERT INTO testTable (adhex,reg,mtime) 
VALUES ('00B0BA','reg-1','1294129605') 
ON DUPLICATE KEY UPDATE reg='ZsS-SLD' 
  CASE 
    WHEN mtime < values(mtime) THEN values(mtime) 
  END

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Присмотритесь к синтаксису INSERT ... ON DUPLICATE. После ON DUPLICATE KEY UPDATE следует последовательность столбец = выражение операторов. Попробуйте что-то вроде:

INSERT INTO testTable (adhex,reg,mtime) 
VALUES ('00B0BA','reg-1','1294129605') 
ON DUPLICATE KEY UPDATE reg=IF(mtime < VALUES(mtime), 'ZsS-SLD', reg), 
  mtime=IF(mtime < VALUES(mtime), VALUES(mtime), mtime)
1 голос
/ 04 января 2011

Это не так, как CASE работает.Возвращает значение, а не кусок кода SQL.

Insert into testTable (adhex,reg,mtime)
VALUES ('00B0BA','reg-1','1294129605')
ON DUPLICATE KEY UPDATE reg=/*'ZsS-SLD'*/ CASE -- Note the commented out value
    WHEN mtime < values(mtime) THEN values(mtime)
    -- Notice there's not ELSE: you'll get NULL if condition is not matched
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...