I'm trying to classify my SKU's and I'm almost there. The desired outcome is:
product_id | sku | sku_class |
---|---|---|
1 | CSs22-01 | sample |
2 | CSs22-02 | sample |
3 | CS2201 | cask |
4 | CS2202 | project |
5 | CS2202/A | project-cask |
6 | CS2202/B | project-cask |
7 | CS2203 | cask |
I do get sample
, cask
, and project-cask
right BUT I don't get project
right (instead I get an incorrect cask
).
The query I'm currently using is:
SELECT
pa.product_id
,pm.sku
,(CASE
WHEN pm.sku LIKE 'CSs%-%' THEN 'sample'
WHEN pm.sku LIKE 'CS%/A'
OR pm.sku LIKE 'CS%/B'
OR pm.sku LIKE 'CS%/C'
OR pm.sku LIKE 'CS%/D'
OR pm.sku LIKE 'CS%/E' THEN 'project-cask'
WHEN ( SELECT COUNT(sku) FROM wp_wc_product_meta_lookup
WHERE sku LIKE pm.sku '%' ) > 1 THEN 'project'
WHEN pm.sku LIKE 'CS%' THEN 'cask'
END) AS sku_class
FROM wp_wc_product_attributes_lookup AS pa
LEFT JOIN wp_wc_product_meta_lookup AS pm ON pa.product_id = pm.product_id
GROUP BY pa.product_id;
But my WHEN ( SELECT COUNT(sku) FROM wp_wc_product_meta_lookup WHERE sku LIKE pm.sku '%' ) > 1 THEN 'project'
is failing and results in (MariaDB) errors like:
- Warning: #1292 Truncated incorrect DOUBLE value: 'CS2202'
- Warning: #1292 Truncated incorrect DOUBLE value: '%'
When I hardcode 'CS2202%'
in the WHERE statement I see -logically- all casks as projects as CS2202 is indeed a project. So the issue is with the LIKE pm.sku '%'
part.
How do I get that part working with the SKU from the main query?
P.S. The logic to tag a SKU as a project is when CSxxxx% occurs more than 1 time otherwise it's a single cask.
CodePudding user response:
Indeed, pm.sku '%'
is the problem. Use CONCAT like this:
WHERE sku LIKE CONCAT(pm.sku, '%')
it's not used for concatenation in MySQL