PHP mysql 按键对 JSON 数据进行排序

我想对 json 数据进行排序,但排序显示错误。这是什么原因?下面是我的数据库表的名称,我在下面给出了页面列名称page_content和 json 数据。我哪里出错了?我是新来的。如果您采取相应行动,请感到高兴。

数据库数据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",

    }

}



索引.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;


    }

}

打印_r


9885758

8088410

6416534

529588

323810

26795682

2176846

16058462

1434348


叮当猫咪
浏览 132回答 1
1回答

函数式编程

您需要取消引用 json 值,并将其转换为数字,以便可以使用它进行正确的排序。您可以同时执行这两项操作,如下所示:order by page_content ->> '$.statistics.viewCount' + 0如果您的 MySQL 版本不支持运算符->>,则:order by json_extract(page_content, '$.statistics.viewCount')) + 0DB Fiddle 上的演示- 两个查询都会产生:| 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"}} |
打开App,查看更多内容
随时随地看视频慕课网APP