sourcetip

json 배열에서 mariadb의 JSON 함수를 사용하여 레코드를 검색하는 방법

fileupload 2023. 7. 22. 10:21
반응형

json 배열에서 mariadb의 JSON 함수를 사용하여 레코드를 검색하는 방법

저는 마리아에서 JSON 기능을 배우고 있습니다.내가 있는 DB

CREATE TABLE IF NOT EXISTS products ( 
                                     id     INT         NOT NULL PRIMARY KEY AUTO_INCREMENT, 
                                     type   VARCHAR(1)  NOT NULL, 
                                     name   VARCHAR(40) NOT NULL, 
                                     format VARCHAR(20) NOT NULL, 
                                     price  FLOAT(5, 2) NOT NULL, 
                                     attr   JSON NOT NULL
                                    ); 

INSERT INTO products (type, name, format, price, attr) VALUES 
 ('M', 'Aliens', 'Blu-ray', 13.99,'{"video": {"resolution": "1080p", "aspectRatio": "1.85:1"}, "cuts": [{"name": "Theatrical", "runtime": 138}, {"name":"Special Edition", "runtime": 155}], "audio": ["DTS HD", "Dolby Surround"]}'); 

INSERT INTO products (type, name, format, price, attr) VALUES 
 ('B', 'Foundation', 'Paperback', 7.99, '{"author": "Isaac Asimov", "page_count": 296}');

Cuts.name="에서 얼마나 많은 레코드가 있는지 알고 싶습니다."극장판

SELECT * FROM `products` WHERE JSON_VALUE(attr,'$.cuts.name')='Theatrical'

저는 여기서 0개의 결과를 받고 있습니다.json 배열에서 데이터를 검색하는 방법은 무엇입니까?

대괄호[]배열에 사용해야 합니다.

사용할 수 있습니다.JSON_EXTRACT(attr, "$.cuts[*].name")안에 내포된.JSON_CONTAINS()와 함께 일하는.'"Theatrical"'튜플이 에 대한 것인지 여부를 결정하기 위한 논쟁name의 요소.cuts배열 포함'"Theatrical"':

SELECT  COUNT(*)
  FROM `products` 
 WHERE JSON_CONTAINS( JSON_EXTRACT(attr, "$.cuts[*].name"), '"Theatrical"' )

Demo

언급URL : https://stackoverflow.com/questions/61501936/how-to-search-records-using-json-function-in-mariadb-from-json-array

반응형