oracle - mysql如何更新一个多表查询出来的字段
PHPz
PHPz 2017-04-17 14:51:02
0
6
592
$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语句实现尼?

PHPz
PHPz

学习是最好的投资!

reply all (6)
洪涛

类似这样,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)
    Ty80

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

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

      巴扎黑

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

      把代的sql代入进去

        大家讲道理

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

        update cart set is_check = value where id in ( select DISTINCT id from (你查询的条件SQL语句) )
          Peter_Zhu

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

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

            Ty80

            这个需求可以通过 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?__... 其中有一部分与这个问题有关

              Latest Downloads
              More>
              Web Effects
              Website Source Code
              Website Materials
              Front End Template
              About us Disclaimer Sitemap
              php.cn:Public welfare online PHP training,Help PHP learners grow quickly!