programing

JSON_OBJECT 값으로 mysql 결과 주문

lovejava 2023. 9. 21. 20:00

JSON_OBJECT 값으로 mysql 결과 주문

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}]
  )
)

각 제품의 첫 번째 변형 가격에 따라 제품을 분류해야 합니다.

  • 첫 번째 변형 가격이 100이므로 제품 ID 1이 첫 번째여야 합니다.
  • 상품 ID 2는 첫번째 변형 가격이 200이고 200 > 100이므로 두번째여야 합니다.

시도:

ORDER BY JSON_EXTRACT(`variants`, '$[0].price)

오류가 발생합니다.

Reference 'variants' not supported (reference to group function)

당신이 원하는 것은:

order by min(v.price)

JSON 개체를 구문 분석할 필요가 없습니다.

열을 숨겨서는 안 될 때의 예입니다 (price(이 경우 JSON에서) 열 안에 있습니다.대신, 계속.priceMySQL이 (필요에 따라) 정렬 또는 필터링을 위해 쉽게 액세스할 수 있도록 자체 열로 지정합니다.

또한 컬럼을 내부에 유지하는 것도 좋습니다.JSONJSON이 "complete"가 되도록 문자열을 지정합니다.

문제는 당신이 주변에 틀린 인용문을 가지고 있었다는 것입니다.variant. 백틱스(사용한 백틱스)는 열 및 테이블 이름에 사용됩니다.아포스트로피나 인용구가 필요했습니다.'아니면") 때문에variant이 컨텍스트에서는 문자열일 뿐입니다.)

언급URL : https://stackoverflow.com/questions/53168942/order-mysql-result-by-value-from-json-object