programing

MySQL JSON_MERGE / REPLACE.값을 실제로 업데이트하고 병합하지 않는 방법

testmans 2023. 8. 13. 09:36
반응형

MySQL JSON_MERGE / REPLACE.값을 실제로 업데이트하고 병합하지 않는 방법

제가 하고 싶은 일, 하지만 그것은 다소 불가능한 것 같습니다.

번역을 저장하기 위한 JSON 데이터를 열에 가지고 있습니다.예: 열 설명 값:{"de": "hi wie gehts?", "en": "hi, how are you?"}

이제 업데이트만 하려고 합니다."en"소유물.로 가능하다는 것을 압니다.JSON_REPLACE하지만 이것을 실현하기 위해서는 먼저 SQL 코드를 생성해야 하는 이상한 구문을 가지고 있습니다.

제가 찾고 있는 것은 그냥 보낼 수 있는 가능성입니다.{"en": "hi, how are you!?"}그리고 나서 그것은 유지될 것입니다."de"속성 및 업데이트만"en"소유물.

있습니다.JSON_MERGE기능합니다. 하지만 이것은 제가 찾고 있는 것이 아닙니다. 하지만 그것을 제외하고는, 그것이 제가 사용하는 구문입니다.

중첩된 mysql 함수 등에 대한 해결 방법이 있습니까?

JSON 기능을 사용할 수 있으면 필요한 것을 달성하기가 쉽지 않습니다.일반 JSON에 항상 단일 키가 있는 경우 다음과 같은 방법을 사용할 수 있습니다(MySQL 5.7.19에서 테스트됨).

SET
  @`json` := '{"de": "hi wie gehts?", "en": "hi, how are you?"}',
  @`plain_json` := '{"en": "hi, how are you!?"}';

SELECT
  JSON_MERGE(
    JSON_REMOVE(
      @`json`,
      CONCAT('$.',
             JSON_EXTRACT(
               JSON_KEYS(@`plain_json`),
               '$[0]'
            )
      )
    ),
    @`plain_json`
  ) AS `update`;

그 결과:

+----------------------------------------------------+
| update                                             |
+----------------------------------------------------+
| {"de": "hi wie gehts?", "en": "hi, how are you!?"} |
+----------------------------------------------------+

만약 당신이 평범한 JSON에 하나 이상의 열쇠를 가지고 있다면, 당신은 당신의 목표를 달성하기 위해 더 복잡한 것이 필요할 것입니다.

db-fiddle을 참조하십시오.

언급URL : https://stackoverflow.com/questions/45863825/mysql-json-merge-replace-how-to-actually-update-values-and-not-merge

반응형