#php #mysql
Вопрос:
существует ли оператор if, когда дело доходит до операторов запросов mysql?
когда я обновляю запись таблицы, я хочу обновлять только определенные столбцы, если они имеют значение, подлежащее обновлению.
например, мне нужна функция таблицы обновлений, и есть таблица для добровольцев и таблица для людей, которым просто нужны обновления по электронной почте.
я хочу использовать ту же функцию (будет функция, которая будет работать только с запросами upd), и возможно ли это сделать теоретически…
если вы обновляете таблицу добровольцев, обновите только эти столбцы, если список рассылки, то обновите их
я знаю, что это можно сделать с помощью оператора if с двумя операторами запроса, основываясь на том, какую таблицу вы обновляете, но мне интересно, можно ли использовать только один оператор запроса с содержащимися в нем условными обозначениями для обновления соответствующих столбцов в таблице.
это может звучать как то, о чем вы мечтали бы, дайте мне знать.
Спасибо.
Комментарии:
1. Вы пытаетесь обновить две таблицы в одном запросе? Это не очень ясно из вашего вопроса
2. итак, чтобы внести ясность. Вы хотите, чтобы одна инструкция SQL обновила две разные таблицы с разными именами полей? что-то вроде: ОБНОВИТЬ добровольцев, УСТАНОВИТЬ список рассылки, ЕСЛИ(таблица = волонтеры, почта, почта) = ‘xyz’;
3. @nickf — именно так, поэтому, когда я иду вносить изменения в будущем, мне не нужно вносить изменения в несколько элементов, а в один запрос. или у меня должен быть другой запрос для каждого экземпляра, вызывающий соответствующий запрос с помощью оператора switch/case. дайте мне знать, что более практично.
4. Это заставляет меня думать, что вам, возможно, лучше объединить таблицы, если они достаточно похожи по своей природе, чтобы вы переключались между похожими запросами
Ответ №1:
Я думаю, что это должно сработать:
UPDATE volunteer, people
SET volunteer.email = 'me@email.com',
people.email = 'other@gmail.com',
people.first_name = 'first',
WHERE people.id = 2 AND volunteer.id = 5;
Я получил это из синтаксиса обновления на веб-сайте MySQL.
Ответ №2:
Вы могли бы сделать это за один запрос, но для меня не имеет смысла, зачем вам это нужно. Может быть, опишите аргументы нужной вам функции и какой эффект они будут иметь?
Вы можете условно обновить что-то вроде этого:
update tablereferences
set foo.bar = if( somebooleanexpression, newbarvalue, foo.bar ),
baz.quux = if( somebooleanexpression, newbazvalue, baz.quux )
where ...
позволяет использовать один и тот же запрос, но контролировать, какие таблицы обновляются.