J'ai une colonne json avec le tableau suivant:
[
{
"id": "24276e4b-de81-4c2c-84e7-eed9c3582a31",
"key": "id",
"type": "input",
},
{
"id": "e0ca5aa1-359f-4460-80ad-70445be49644",
"key": "name",
"type": "textarea",
}
]
J'ai essayé la requête suivante pour obtenir la ligne qui a l'ID 24276e4b-de81-4c2c-84e7-eed9c3582a31
dans la colonne du document, mais il ne renvoie aucun résultat:
select * from jobs WHERE document->'$[*].id' = "24276e4b-de81-4c2c-84e7-eed9c3582a31"
Quelqu'un sait comment faire la bonne requête?
J'utilise mysql 5.7 et donc JSON_CONTAINS peut être facilement utilisé comme ceci:
SELECT JSON_CONTAINS(
'[{"id": "24av","name": "she"},{"id": "e0c2", "name": "another_she"}]',
JSON_OBJECT('id', "e0c2")
);
Essayez comme ceci:
SELECT * FROM jobs WHERE document->'$[*].id' = json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31");
ça marche pour moi, et je pense que le coup est plus réussi:
SELECT * FROM jobs WHERE json_contains(document->'$[*].id', json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31"));
En fait, il est facile de se rappeler que la valeur de retour est JSON_TYPE
mais pas une chaîne ou autre chose;
peut être ça? @Barmar
SELECT * FROM jobs WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id') IS NOT NULL;
Lorsque vous utilisez document->'$[*].id'
, Il renvoie une liste séparée par des virgules de toutes les propriétés d'ID. Ce ne sera pas égal à la valeur d'une seule chaîne d'ID, sauf s'il n'y a qu'un seul objet dans la colonne document
.
Vous devez utiliser JSON_SEARCH()
pour rechercher un élément correspondant dans la valeur JSON.
SELECT *
FROM jobs
WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id');