Из форумов MySQL: Re: ОБНОВИТЬ несколько таблиц с помощью одного оператора UPDATE
Из справочника MySQL: 12.2.10.ОБНОВЛЕНИЕ Синтаксис
Я хотел бы предположить, что ваш PHP-код будет что-то в строках
$updateGuests =
"UPDATE
main M LEFT JOIN guest G ON M.id = G.mainID
SET
G.guestMeal = '$guestMeal',
G.guestNotes = '$guestNotes',
G.guestAccept = '$guestAccept',
M.meal = '$something'
WHERE G.mainID = '$id'";
Выше, конечно, не будет работать для строк, которые на самом деле не существуют нагостевой стол - это ОБНОВЛЕНИЕ в конце концов.Предполагая, что у вас есть способ связать определенных гостей и их данные из представленных данных (может быть, их идентификатор или гостевая таблица?), Вы можете выполнять выборочные обновления через цикл, а затем добавлять операторы CASE к запросу, чтобы обновить все зарегистрированных гостей одновременно:
$sql =
"UPDATE
main M LEFT JOIN guests G ON M.id = G.mainID
SET
M.meal = '$something'
";
for ($i=0; $i < count($yourArrayHere); $i++) {
/* ... code to extract values from array here ...*/
$sql .=
", G.guestMeal = CASE G.id WHEN '$guestID' THEN '$guestMeal' END
";
}
$sql .= "WHERE M.id = '$id'";
Выше написано исходя из предположения, что вам нужно обновить main таблицу с некоторыми данными.Поскольку логически это всегда одна строка, она отображается в верхней части запроса.Элемент цикла является статическим, поэтому вы добавляете свои поля таким образом, только если у вас всегда есть строгий набор заполненных полей в отправляемых данных.Если это не так, вы можете сделать его немного более гибким, добавив способ преобразования имен полей формы в имена полей базы данных, а затем изменив строку в общем случае, добавляя ее к выражению $ base sql в целевом поле и в исходном var- переменные ($$ var) являются одним из способов достижения этого.Затем вы оставили бы операторы CASE, основанные на G.id, нетронутыми (конечно, также предполагая, что одно из них является ключевым полем, которое вы также обязательно должны были бы иметь в своих данных для уникальной идентификации строк дочерней таблицы).
Конечно, вам также нужно извлечь переменные, которые вы хотите использовать в цикле for, чтобы затем использовать их так, как я использовал в приведенном выше коде
Проще сделать, чем было сказано.