$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
语句实现尼?
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)
PHP中文网2017-04-17 14:53:02
更新は書き込みロックであるため、複雑な SQL を使用することはお勧めできません。
select ステートメントを使用して主キーを見つけてリストに追加し、別の update car set ... id in (1,2,3,4)
ステートメントを使用して、数量が 200 を超える場合は、一括更新を使用してください。
大家讲道理2017-04-17 14:53:02
これは、update ステートメントを通じて実現できます。
カートセットの更新 is_check = value where id in (
select DISTINCT id from (クエリの条件付き SQL ステートメント)
)
天蓬老师2017-04-17 14:53:02
私は @seanlook の回答に同意します。運用環境では複雑な SQL を作成しないでください。@prolifes の回答でも目標は達成できますが、同時実行性が高く大量のデータがある場合は、長期ロックが発生する可能性があります。
当社の一般的なアプローチは、まず条件に基づいて主キーを見つけ、次に主キーに基づいて対応するフィールド値を更新することです。
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?__... その一部はこの問題に関連しています