Есть только два столбца, и я хочу ОБНОВИТЬ, только если menu_id
существует. В противном случае я хочу вставить новую строку. Здесь мой запрос:
REPLACE `dol_subs_menu_access`
SET `menu_id` = '{$aVars['menu_item']}',
`mlevels` = '{$sMemLevels}'
Это создает новую строку каждый раз. Что-то мне не хватает?
Являются ли какие-либо из столбцов в вашем заявлении первичным ключом? Я предполагаю, что это не так, что означает REPLACE statement (чтобы не путать с функцией замены строк) необходимо определить, заменяя vs inserting...
Вы можете посмотреть синтаксис mySQL ON DUPLICATE KEY. Это позволит вам вставить запись или обновить запись, если она уже существует. Вам нужно будет включить первичный ключ в ваш запрос, хотя.
Вот пример запроса со страницы документации:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
Я думаю, что это будет выглядеть примерно так для вашего запроса (сначала проверьте его)
INSERT INTO `dol_subs_menu_access` (menu_id,mlevels)
VALUES ('{$aVars['menu_item']}','{$sMemLevels}')
ON DUPLICATE KEY UPDATE mlevelsMemLevels='{$sMemLevels}';
mlevelsMemLevels = VALUES(mlevelsMemLevels)
, нет необходимости помещать строку дважды.
REPLACE
в sql выполняет замену строки для подстроки в более длинной строке. Похоже, вы хотитеUPDATE
фактическое содержимое поля к чему-то еще, это правильно? И какую БД вы используете?