我正在编程喜欢的功能。
例如,我们有多个地址,并且可以选择其中一个作为地址。
此刻,我有2个查询来完成这项工作:
UPDATE userdata
SET maindata = 0
WHERE
cid = :id;
UPDATE userdata
SET maindata = 1
WHERE
cid = :id AND id = :id2
LIMIT 1
在第一个查询中,我将所有地址都设置为“无收藏夹”,在第二个查询中,我将新选择的地址设置为收藏夹。
有什么方法可以执行此查询或将两者都重写为1?甚至是更好的解决方案?
答案 0 :(得分:2)
如果您要查询单个查询,则可以使用case when(或if)
update userdata
set maindate = case when id = :id2 then 1
else 0 end
where cid = :id;
为了提高性能,请确保您在userdata列(cid,id)上具有正确的索引
并且第一个wuary ..的扫描行数应该相同,但是这样可以避免第二个..
最终尝试创建一个复合索引
create index myidx1 on userdata(cid, id)
答案 1 :(得分:1)
NULL
这将有所帮助。我不确定您的查询,但这会有所帮助。让我知道您是否看起来与众不同...