Rahul Reddy
Rahul Reddy

Reputation: 120

Retrieving Values of Json Data Inside JSON Array in Mysql

I have JSON column, containing the JSON array. My Scenario, is to get all the the records where value of url is '"example.com/user1"' is present. I have trouble writing the query for this operation.

Record1
 [
    {
        "id": "1",
        "firstname": "user1",
        "url": "example.com/user1"
    },
    {
        "id": "2",
        "firstname": "user2",
        "url": "example.com/user2"
    }
]
Record2
     [
        {
            "id": "1",
            "firstname": "user3",
            "url": "example.com/user3"
        },
        {
            "id": "2",
            "firstname": "user2",
            "url": "example.com/user2"
        }
    ]
......
......
......
Record10
     [
        {
            "id": "1",
            "firstname": "user10",
            "url": "example.com/user10"
        },
        {
            "id": "2",
            "firstname": "user1",
            "url": "example.com/user1"
        }
    ]

The Query Which I ran is:

Select internal_id from users_dummy where JSON_EXTRACT(user_friends, '$[0].url') = "example.com/user1" or JSON_EXTRACT(user_friends, '$[1].url') = "example.com/user1";

So o/p was: Record1, Record10

Is this the proper way to search for the values across the records? Thanks in advance.

Upvotes: 0

Views: 53

Answers (1)

Sebastian Brosch
Sebastian Brosch

Reputation: 43604

You can use JSON_SEARCH like this:

SELECT * 
FROM users_dummy 
WHERE JSON_SEARCH(user_friends, 'one', 'example.com/user1', NULL, '$[*].url') IS NOT NULL

demo on dbfiddle.uk

You can use the following solution in case you are using objects instead of arrays:

SELECT * 
FROM users_dummy 
WHERE JSON_SEARCH(user_friends, 'one', 'example.com/user1', NULL, '$.*.url') IS NOT NULL

demo on dbfiddle.uk

Upvotes: 1

Related Questions