按json对象的值对mysql结果排序

mbzjlibv  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(602)

我有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)
oyjwcjzk

oyjwcjzk1#

这是一个不应隐藏列的示例( price )在列中(在本例中是json)。相反,保持 price 作为它自己的列,使mysql能够方便地进行排序(根据需要)或过滤。
也可以将列保留在 JSON 字符串,以便json是“完整的”。
问题是你引用了错误的话 variant . backtics(您使用的)用于列和表名。你需要撇号或双引号( ' 或者 " )因为 variant 在这个上下文中只是一个字符串。)

7d7tgy0s

7d7tgy0s2#

我想你想要:

order by min(v.price)

不需要解析json对象。

相关问题