产品有两种颜色(黑色和白色)
我想使用 LIMIT 来不带上所有颜色......颜色的数量将是总数
例子:
LIMIT 1 将返回:
- 颜色名称:“[{“颜色”:“黑色”}]”
- 数量颜色:int(2)
LIMIT 2 将返回:
- 颜色名称:[{“颜色”:“黑色”},{“颜色”:“白色”}]
- 数量颜色:int(2)
我必须在 JSON 中返回名称
但是我看到没有办法在 JSON_ARRAYAGG 中使用 LIMIT
解决方案是在 FROM中使用子查询
它起作用了......我不得不添加 GROUP BY v.id
- LIMIT 1 只返回一种颜色(OK)
- LIMIT 2 返回两种颜色(OK)
但是颜色的数量( amountColors )总是 1 在上面两种情况下应该是 2
WITH cte AS (
SELECT
pdv.variation_id
FROM product_detail pd
INNER JOIN product_detail_variation pdv
ON (pdv.product_detail_id = pd.id)
WHERE pd.product_id = -- ID-HERE
)
SELECT
JSON_ARRAYAGG(colorsName) AS colorsName,
amountColors
FROM (
SELECT
JSON_OBJECT(
'color', v.name
) AS colorsName,
COUNT(v.id) AS amountColors
FROM variation v
INNER JOIN grid g
ON (g.id = v.grid_id)
WHERE g.name = 'Color' AND EXISTS (TABLE cte)
GROUP BY v.id
LIMIT 1
) v
/* Test: LIMIT 1
array(2) {
["colorsName"]=>
string(20) "[{"color": "Black"}]"
["amountColors"] => int(1) // should return int(2)
}*/
/* Test: LIMIT 2
array(2) {
["colorsName"]=>
string(40) "[{"color": "Black"}, {"color": "White"}]"
["amountColors"] => int(1) // should return int(2)
}
*/
MySQL版本:8.0+