我有MariaDB 10.2和以下SQL:
SELECT products.*,
CONCAT('[', GROUP_CONCAT(JSON_OBJECT(
'id', V.id,
'price', V.price
) ORDER BY V.price ASC), ']') AS variants,
FROM products
LEFT JOIN products_variants V ON V.products_id = products.id
GROUP BY products.id
LIMIT 0,10
结果是:
Array (
[0] => Array (
[id] => 1,
[variants] => [{"id": 1, "price": 100},{"id": 2, "price": 110}]
)
[1] => Array (
[id] => 2,
[variants] => [{"id": 3, "price": 200},{"id": 4, "price": 210}]
)
)
我需要根据每种产品的第一个版本的价格对产品进行排序。
我尝试:
ORDER BY JSON_EXTRACT(`variants`, '$[0].price)
但出现错误:
Reference 'variants' not supported (reference to group function)
答案 0 :(得分:1)
我想你想要
order by min(v.price)
无需解析JSON对象。
答案 1 :(得分:0)
这是一个示例,说明不应在列(在这种情况下为JSON)内隐藏列(price
)。相反,请将price
保留为自己的列,以使MySQL可以轻松进行排序(根据需要)或过滤。
还可以将列保留在JSON
字符串中,以使JSON是“ complete”。
问题是您在variant
周围引用了错误的引号。 Backtics(您使用的)用于列和表的名称。您需要用撇号或双引号('
或"
),因为在这种情况下variant
只是一个字符串。)