Mysql按城市、省和国家排列
我得到了以下三个值来查询Mysql按城市、省和国家排列,mysql,Mysql,我得到了以下三个值来查询实体表: 城市id=17782省id=654和国家id=12 现在我想按提供的值顺序对结果进行排序 城市id>省id>国家id 如果city_id不为null且city_id=17782,则它应位于结果集中的第一位 如果city_id为空,则它将按省进行排序_id=654 前提是省/自治区id不为空 如果省id为空,则返回国家id=12 我有一个查询,它不能按预期工作 Table: entity ╔════╦════════════╦═════════════╦═════
实体
表:
城市id=17782
省id=654和国家id=12
现在我想按提供的值顺序对结果进行排序
城市id>省id>国家id
Table: entity
╔════╦════════════╦═════════════╦════════════╗
║ id ║ city_id ║ province_id ║ country_id ║
╠════╬════════════╬═════════════╬════════════╣
║ 1 ║ NULL ║ 654 ║ 12 ║
║ 2 ║ 17782 ║ 654 ║ 12 ║
║ 3 ║ 17782 ║ 654 ║ 12 ║
║ 4 ║ 16762 ║ NULL ║ 32 ║
╚════╩════════════╩═════════════╩════════════╝
请注意,值为null的省id应排在第一位,而值654应排在第一位,这是因为第一个条件city_id为null
期望结果
╔════╦════════════╦═════════════╦════════════╗
║ id ║ city_id ║ province_id ║ country_id ║
╠════╬════════════╬═════════════╬════════════╣
║ 2 ║ 17782 ║ 654 ║ 12 ║
║ 3 ║ 17782 ║ 654 ║ 12 ║
║ 4 ║ 16762 ║ NULL ║ 34 ║
║ 1 ║ NULL ║ 654 ║ 12 ║
╚════╩════════════╩═════════════╩════════════╝
试试这个:
╔════╦════════════╦═════════════╦════════════╗
║ id ║ city_id ║ province_id ║ country_id ║
╠════╬════════════╬═════════════╬════════════╣
║ 2 ║ 17782 ║ 654 ║ 12 ║
║ 3 ║ 17782 ║ 654 ║ 12 ║
║ 1 ║ NULL ║ 654 ║ 12 ║
║ 4 ║ 16762 ║ NULL ║ 34 ║
╚════╩════════════╩═════════════╩════════════╝
从实体中选择*
订单由(城市编号17782或省编号654或国家编号12)描述,
城市识别号17782描述,省识别号654描述,国家识别号12描述;
“排序依据”的第一部分将所有所需的值置于结果的前面,然后按优先城市、省、国家对其中的其余部分进行排序
我使用
,这样城市id=NULL
就不会强制该行退出省id
排序。试试下面的方法,让我知道谢谢
select * from entity
order by (city_id <=> 17782 OR province_id <=> 654 OR country_id <=> 12) DESC,
city_id <=> 17782 DESC, province_id <=> 654 DESC, country_id <=> 12 DESC;
请尝试以下操作:当城市id=17782且省id不为空时,从实体顺序中选择*然后当城市id为空且省id=654时选择1,然后当省id为空且国家id=12时选择2,然后选择3其他4 End是否显示所需结果,所以我们可以判断我们是否做对了?你不能从你展示的样本输入中得到结果。没有包含
城市\u id=16762
和省\u id=NULL
@Barmar的行。我已更新了所需结果。按国家、省、市排序是否更符合逻辑?您的表格将显示所有国家,它将显示所有省份和所有城市。。。只需在需要将空值移到底部的位置添加desc或asc。请检查结果集的屏幕截图:立即尝试,我已更改为
比较。我尝试了此操作,具有空值的城市id优先,即使其值为17782,省份也是如此
select * from entity
order by (city_id <=> 17782 OR province_id <=> 654 OR country_id <=> 12) DESC,
city_id <=> 17782 DESC, province_id <=> 654 DESC, country_id <=> 12 DESC;
select * from entity
order by
case when city_id = 17782 and province_id is not null then 1
when city_id is null and province_id = 654 then 2
when province_id is null and country_id = 12 then 3
else 4 end