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

  • 如果city_id不为null且city_id=17782,则它应位于结果集中的第一位
  • 如果city_id为空,则它将按省进行排序_id=654 前提是省/自治区id不为空
  • 如果省id为空,则返回国家id=12
  • 我有一个查询,它不能按预期工作

    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