検索

ホームページ  >  に質問  >  本文

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

$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 语句实现尼?

PHPzPHPz2875日前697

全員に返信(6)返信します

  • PHP中文网

    PHP中文网2017-04-17 14:53:02

    これに似ています、sql语句你自己调试が必要です

    カートを更新 d set d.is_check = $is_chick
    
    どこに存在しますか(
    ' から 1 を選択してください。 $GLOBALS['ecs']->table('goods') 。 「AS g」。
                    「左結合」。 $GLOBALS['ecs']->table('cart') 。 「AS c ON c.goods_id = g.goods_id」。
                    ' WHERE g.enter_mode = 3105 AND c.user_id = $user_id および c.id=d.id)

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 14:53:02

    更新は書き込みロックであるため、複雑な SQL を使用することはお勧めできません。

    select ステートメントを使用して主キーを見つけてリストに追加し、別の update car set ... id in (1,2,3,4) ステートメントを使用して、数量が 200 を超える場合は、一括更新を使用してください。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:53:02

    内部結合を更新します (b から yy を選択) c on a.id =b.id set a.xx = c.yy

    生成された SQL を入力します

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:53:02

    これは、update ステートメントを通じて実現できます。

    カートセットの更新 is_check = value where id in (
        select DISTINCT id from (クエリの条件付き SQL ステートメント)
    )

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:53:02

    私は @seanlook の回答に同意します。運用環境では複雑な SQL を作成しないでください。@prolifes の回答でも目標は達成できますが、同時実行性が高く大量のデータがある場合は、長期ロックが発生する可能性があります。

    当社の一般的なアプローチは、まず条件に基づいて主キーを見つけ、次に主キーに基づいて対応するフィールド値を更新することです。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 14:53:02

    この要件は、UPDATE + JOIN によって実現できます。おおよその SQL は次のとおりです。

    UPDATE 商品 AS g
    LEFT JOIN カート 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?__... その一部はこの問題に関連しています

    返事
    0
  • キャンセル返事