Как объединить два запроса UPDATE в один, разные WHERE и SET? - PullRequest
0 голосов
/ 19 ноября 2018

Мне было интересно, возможно ли объединить эти два запроса, так как они не работают по отдельности (один из двух работает только).Это

$addquery = "UPDATE winners SET mem_name='$addname' WHERE mem_name='$deletename'";
$addresult= mysqli_query($connect, $addquery);
$query = "UPDATE winners INNER JOIN members SET winners.mem_id = members.mem_id
                    WHERE winners.mem_name = members.mem_name";
$result = mysqli_query($connect, $query);

Можно ли это сделать одним запросом?Спасибо !!!

1 Ответ

0 голосов
/ 19 ноября 2018

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

UPDATE winners w
SET w.mem_name = '$addname'
, w.mem_id = IFNULL(SELECT m.mem_id 
                    FROM members AS m 
                    WHERE m.mem_name = '$addname' 
                    ORDER BY m.mem_id DESC 
                    LIMIT 1
                   , w.mem_id
                   )
WHERE w.mem_name = '$deletename'
;

Обратите внимание, что ORDER BY технически необязателен; в вашем вопросе не указано, является ли mem_name гарантированно уникальным в members. Если он уникален, заказ не должен быть необходим; если это не так, это, по крайней мере, добавляет некоторую согласованность к ожидаемому полученному значению.

Если у вас есть контроль над дизайном базы данных, я бы предложил удалить mem_name из winners в целом. Это / будет избыточными данными, если вы сначала управляете отношением mem_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...