I want to sort the json data but the sorting shows it wrong. what is the reason of this ? below is the name of my database table I have given pages column name page_content and json data below. Where am I making a mistake? I’m new here. Please be happy if you act accordingly.
Database data page_content
{ "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"1434348", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"16058462", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"2176846", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"8088410", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"9885758", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"26795682", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"323810", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"529588", } } { "kind":"video", "etag":"edtags", "id":"id", "statistics":{ "viewCount":"6416534", } }
index.php
$query = $db->query('SELECT * FROM pages order by JSON_EXTRACT(page_content,"$.statistics.viewCount") ASC'); $query->execute(); $row = $query->fetchAll(PDO::FETCH_ASSOC); if ($row ) { foreach ($row as $value) { $json = json_decode($value['page_content'], true); $videoView = $json['statistics']['viewCount']; echo $videoView; } }
print_r
9885758 8088410 6416534 529588 323810 26795682 2176846 16058462 1434348
Advertisement
Answer
You need to unquote the json value, and cast it to a number so you can use it for proper ordering. You can do both at once as follows:
order by page_content ->> '$.statistics.viewCount' + 0
If your version of MySQL does not support operator ->>
, then:
order by json_extract(page_content, '$.statistics.viewCount')) + 0
Demo on DB Fiddle – both queries yield:
| page_content | | :--------------------------------------------------------------------------------------- | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "323810"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "529588"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "1434348"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "2176846"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "6416534"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "8088410"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "9885758"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "16058462"}} | | {"id": "id", "etag": "edtags", "kind": "video", "statistics": {"viewCount": "26795682"}} |