朝、UPDATE、JOIN、SUBQUERYを使用して、カテゴリ/ストアごとに製品の数を作成しようとしていますが、構文を正しく理解できません。誰かが間違っているところを助けてくれますか?
UPDATE
oc_category_to_store c2s
SET
c2s.product_count =
(
SELECT
count(p.product_id) as product_count,
p2c.category_id,
p2s.store_id
FROM
oc_product p
INNER JOIN oc_product_to_category p2c ON
(p.product_id = p2c.product_id)
INNER JOIN oc_product_to_store p2s ON
(p.product_id = p2s.product_id)
) AS pc
WHERE
(p2c.category_id = pc.category_id) AND
(p2s.store_id = pc.store_id)
基本的にこれはOpenCartにありますが、既存の製品カウントルーチンはPHPで行われ、製品の大規模なDBで行われるため、サイトのクロール速度が低下します。
商品は、product_to_categoryテーブルとproduct_to_storeテーブル、カテゴリを使用してIDでカテゴリとストアの両方にリンクされ、category_to_storeテーブルを使用してストアにもリンクされます。
mySQLクエリを実行して、category_to_storeテーブルに値を格納することにより、カテゴリ/ストアごとの商品数を更新したいと思います。これは、商品が追加/削除/更新されたときにのみ実行する必要があり、ページが読み込まれるたびに実行する必要はありません。
CREATE TABLE `oc_product_to_category` (
`product_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
PRIMARY KEY (`product_id`,`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AVG_ROW_LENGTH=9 ROW_FORMAT=FIXED;
CREATE TABLE `oc_product_to_store` (
`product_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`product_id`,`store_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AVG_ROW_LENGTH=9 ROW_FORMAT=FIXED;
CREATE TABLE `oc_category_to_store` (
`category_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL,
`product_count` int(11) DEFAULT NULL,
PRIMARY KEY (`category_id`,`store_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AVG_ROW_LENGTH=9 ROW_FORMAT=FIXED;