Du kan gøre dette i MySQL 8.0 med JSON_TABLE() :
select r.res from mytable,
json_table(mytable.content, '$[*]' columns (res int path '$')) r
where mytable.id = 1
Jeg testede på MySQL 8.0.17, og dette er outputtet:
+------+
| res |
+------+
| 3 |
| 4 |
+------+
Hvis du bruger en version, der er ældre end MySQL 8.0, har du disse muligheder:
- Find en umuligt kompleks SQL-løsning. Dette er næsten altid den forkerte måde at løse problemet på, fordi du ender med kode, der er for dyr at vedligeholde.
- Hent JSON-arrayet, som det er, og eksploder det i applikationskoden.
- Normaliser dine data, så du har én værdi pr. række i stedet for at bruge JSON-arrays.
Jeg finder ofte spørgsmål om Stack Overflow om brug af JSON i MySQL, der overbeviser mig om, at denne funktion har ødelagt MySQL. Udviklere bliver ved med at bruge det uhensigtsmæssigt. De kan godt lide, at det gør det nemt at indsætte semi-strukturerede data, men de finder ud af, at det gør forespørgsler at data er alt for komplekse.