Mysql 按JSON字段值排序
我有一个包含json值的表,如下所示: -表1Mysql 按JSON字段值排序,mysql,json,Mysql,Json,我有一个包含json值的表,如下所示: -表1 id | name | data ------+----------+--------------- 1 | Test | {"city_id": 3, "email":"test@test.com", "city_name":"something"} 2 | Test 2 | {"city_id": 1, "email":"test2@test2.com", "city_name":"another"
id | name | data
------+----------+---------------
1 | Test | {"city_id": 3, "email":"test@test.com", "city_name":"something"}
2 | Test 2 | {"city_id": 1, "email":"test2@test2.com", "city_name":"another"}
3 | Test 3 | {"city_id": 6, "email":"test3@test3.com", "city_name":"blahblah"}
现在,我需要选择记录,并按顺序
数据。城市名称
,因此我使用以下代码:
SELECT id, name, JSON_EXTRACT(data, 'city_name') AS cityName
FROM table1
ORDER BY cityName ASC
但此查询无法正确排序我的记录
注意:city\u name
有UTF-8字符。检查此项
SELECT Id ,name,SUBSTRING_INDEX(SUBSTRING_INDEX(data,'city_name":"',-1),'"',1) as CITY
FROM tempjson
order by SUBSTRING_INDEX(SUBSTRING_INDEX(data,'city_name":"',-1),'"',1)
输出:
您似乎没有正确使用,请尝试:
SELECT id, name, JSON_EXTRACT(data, '$.city_name') AS cityName
FROM demo ORDER BY cityName ASC
为了正确排序,我通常将JSON值()转换为正确的类型:
SELECT id, name, data->>'$.city_name' AS cityName
FROM table1
ORDER BY CAST(cityName AS CHAR) ASC
否则,您将以blob(二进制)进行排序,blob(二进制)被视为二进制字符串(字节字符串),因此它们具有二进制字符集和排序规则,比较和排序基于列值()中字节的数值。您能给我们显示实际数据、错误输出和预期输出吗?请尝试as::SELECT。。。JSON_EXTRACT(数据,$.city_name')作为cityName…MySQL使用utf8mb4_bin排序规则处理JSON上下文中使用的字符串,因此重音和大小写是敏感的。工作非常完美。