我有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}]
)
)
我需要根据每个产品的第一个变体的价格来分类产品。
产品id 1必须是第一个,因为第一个变量的价格是100
产品id 2必须是第二个,因为第一个变量的价格是200,并且200>100
我试着:
ORDER BY JSON_EXTRACT(`variants`, '$[0].price)
但获取错误:
Reference 'variants' not supported (reference to group function)
2条答案
按热度按时间oyjwcjzk1#
这是一个不应隐藏列的示例(
price
)在列中(在本例中是json)。相反,保持price
作为它自己的列,使mysql能够方便地进行排序(根据需要)或过滤。也可以将列保留在
JSON
字符串,以便json是“完整的”。问题是你引用了错误的话
variant
. backtics(您使用的)用于列和表名。你需要撇号或双引号('
或者"
)因为variant
在这个上下文中只是一个字符串。)7d7tgy0s2#
我想你想要:
不需要解析json对象。