mysql如何更新一个多表查询出来的字段

发布于 2022-09-02 20:10:00 字数 548 浏览 11 评论 0

$sql = 'SELECT c.is_check' .
                ' FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
                ' LEFT JOIN ' . $GLOBALS['ecs']->table('cart') . ' AS c ON c.goods_id = g.goods_id ' .
                ' WHERE g.enter_mode = 3105 AND c.user_id = $user_id';
                

如上 sql 语句是通过 cart 表和 goods 表的一些条件查询出 cart 表中符合条件的 is_check 字段。
我现在想将这个字段里的值统一更新为我前台传过来的 $is_chick,该怎么实现尼?

或者说能不能直接用 updata 语句实现尼?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

雪花飘飘的天空 2022-09-09 20:10:00

类似这样,sql语句你自己需要调试

update cart d set d.is_check = $is_chick

where exists(
SELECT 1 FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
                ' LEFT JOIN ' . $GLOBALS['ecs']->table('cart') . ' AS c ON c.goods_id = g.goods_id ' .
                ' WHERE g.enter_mode = 3105 AND c.user_id = $user_id and c.id=d.id)
空心空情空意 2022-09-09 20:10:00

update是写锁,不建议使用复杂sql。

用你的select语句把 主键查出来放到一个list里,然后另一个update cart set ... id in (1,2,3,4) 语句去更新,如果数量大于200,请用批量更新。

分開簡單 2022-09-09 20:10:00

update a inner join (select yy from b) c on a.id =b.id set a.xx = c.yy

把代的sql代入进去

知你几分 2022-09-09 20:10:00

这个是可以通过update语句实现的

update cart set is_check = value where id in (
    select DISTINCT id from (你查询的条件SQL语句)
)
¢蛋碎的人ぎ生 2022-09-09 20:10:00

同意@seanlook 的答案,在生产环境中不要写复杂的SQL,@prolifes 的答案虽然也能达到目的,但如果在高并发和数据量大的情况下有可能造成长时间锁。

我们公司一般的做法就是先根据条件查出主键,再根据主键update对应的字段值。

诺曦 2022-09-09 20:10:00

这个需求可以通过 UPDATE + JOIN 实现,大概的 SQL 如下:

UPDATE goods AS g
LEFT JOIN cart AS c ON c.goods_id = g.goods_id 
SET c.is_check=$is_check
WHERE g.enter_mode = 3105 AND c.user_id = $user_id;

具体可以看我最近写的一篇文章 https://mp.weixin.qq.com/s?__... 其中有一部分与这个问题有关

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文