商品データ フィードの操作に取り組んでおり、現在、関連商品のグループ化に取り組んでいます。欲しいものはほとんど手に入ったけど、凡庸なレーシング ドライバーのように、最も必要なときにスキルが不足しています。
私の問題を説明するために、簡略化されたバージョンを作成しました。データ構造は次のとおりです。
CREATE TABLE `feed` (
`sku` VARCHAR(10),
`price` DECIMAL(6,2),
`groupkey` VARCHAR(10)
);
INSERT INTO `feed` (`sku`, `price`, `groupkey`) VALUES
('AAA', 10.00, NULL),
('BBB', 10.00, 'group1'),
('CCC', 12.00, 'group1'),
('DDD', 10.00, 'group2'),
('EEE', 12.00, 'group2'),
('FFF', 14.00, 'group2'),
('GGG', 20.00, NULL);
私の現在のクエリは次のとおりです。
SELECT feed.groupkey
, group_concat(feed.sku) AS skus
, group_concat(feed.price) AS prices
, feed.price AS pprice
FROM
feed
WHERE
feed.groupkey IS NOT NULL
GROUP BY
feed.groupkey;
クエリは次の行を返します。
+----------+-------------+-------------------+--------+
| groupkey | skus | prices | pprice |
+----------+-------------+-------------------+--------+
| group1 | BBB,CCC | 10.00,12.00 | 10.00 |
| group2 | DDD,EEE,FFF | 10.00,12.00,14.00 | 10.00 |
+----------+-------------+-------------------+--------+
実際に行う必要があるのはpprice
、連結された各 から減算するprice
ことで、絶対価格ではなく、各 SKU 間の価格差を示します。これは夢のような結果を返します:
+----------+-------------+-------------------+--------+
| groupkey | skus | prices | pprice |
+----------+-------------+-------------------+--------+
| group1 | BBB,CCC | 0.00,2.00 | 10.00 |
| group2 | DDD,EEE,FFF | 0.00,2.00,4.00 | 10.00 |
+----------+-------------+-------------------+--------+
私は一般的にこのフィードに多くの時間を費やしてきましたが、おそらく統合の最後のハードルであることに本当に行き詰まっています. 正しい方向に進むためのガイダンスをいただければ幸いです。
編集: このクエリの結果を「仮想」製品行として使用して、グループ内の製品の親として機能します。