简体   繁体   English

如何将两个UPDATE查询合并到一个不同的WHERE和SET中?

[英]How to merge two UPDATE queries into one, different WHERE and SET?

I was wondering if it's possible to combine these two queries as they do not work separately (one of the two only works). 我想知道是否有可能合并这两个查询,因为它们不能单独工作(两个只能工作之一)。 They are 他们是

$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);

Can this be done in just one query? 可以在一个查询中完成吗? Thank you!!! 谢谢!!!

I am not saying you should do it, but judging from the flow of the code you provided, this is how you could do it. 我并不是说您应该这样做,而是从您提供的代码流来看,这是您可以做到的方式。

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'
;

Note, the ORDER BY is technically optional; 注意,ORDER BY在技术上是可选的; your question does not state whether mem_name is guaranteed unique in members . 您的问题没有说明mem_name是否在members保证唯一。 If it is unique, the order by should not be needed; 如果是唯一的,则不需要排序依据。 if it is not, it at least adds some consistency to the expected value retrieved. 如果不是,则至少为检索到的期望值增加一些一致性。

If you have control over the database design, I would suggest removing mem_name from winners altogether. 如果您对数据库设计有控制权,我建议完全从winners删除mem_name It is/would be redundant data if you were managing the relation primarily by mem_id to begin with. 如果您最初主要是通过mem_id管理关系,那么它将/将是冗余数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM