MySQLのSELECT結果(サブクエリ)でUPDATEをする

f:id:setouchinatsu:20190404165012p:plain:w200

UPDATE時のテーブル定義に使用するテーブルを並べて使うことができる。結果下記のようなSQLが書ける。

UPDATE
category,
(
SELECT item.category_id, COUNT(*) AS num
FROM category LEFT JOIN item ON category.id = item.category_id
GROUP BY relation.tag_host_id
) AS items
SET category.item_count = items.num
WHERE category.id = items.category_id

カテゴリに属する商品数を計算するのにSQLで1分かかる。全体のキャッシュを取るのもアホらしいし、バッチでカテゴリのカラムに商品数を格納することにした。UPDATEも入るので2分くらいかかった。これを一時間に一度実行できればと思う。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA