【问题标题】:Order by where condition按 where 条件排序
【发布时间】:2012-11-14 06:08:20
【问题描述】:

我有以下疑问:

select `state` from `table1` 
where `state` in ('NC','North Carolina','TN','Tennessee','CO','Colorado','NM','New Mexico','UT','Utah')
limit 200 offset 0

我需要按state 排序的结果,因为它们出现在我的where 子句中(即首先是NC,然后是TN,然后是CO,等等)。

我该怎么做?我尝试使用order by,但没有给出这个结果。

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:

    你可以使用ORDER BY FIELD

    SELECT `state`
    FROM `table1`
    WHERE `state` IN ('NC','North Carolina','TN','Tennessee','CO','Colorado','NM','New Mexico','UT','Utah')
    ORDER BY FIELD(`state`, 'NC','North Carolina','TN','Tennessee','CO','Colorado','NM','New Mexico','UT','Utah');
    

    【讨论】:

    • 你看不到标签MySQL吗?
    • @Mortalus 这个问题有mysql标签
    • 有没有办法重用IN子句中的值列表?
    • @Asad 你说的重用是什么意思? :D
    • @JohnWoo 我的意思是有什么办法不用再写出来。
    【解决方案2】:
    SELECT col_name
    FROM table_nane
    WHERE col_nane IN ('NC','North Carolina','TN','Tennessee','CO','Colorado','NM','New Mexico','UT','Utah')
    ORDER BY FIELD(`state`, 'NC',.....);
    

    等等……

    【讨论】:

    • 您应该将查询缩进四个空格,以便将其显示为代码
    【解决方案3】:

    试试这个:

    order by case when `state`='NC' or `state`='North Carolina' then 1 
                  when `state`='TN' or `state`='Tennessee' then 2
                  when `state`='CO' or `state`='Colorado' then 3
             end 
    

    【讨论】:

      【解决方案4】:

      您可以将ORDER BYCASE WHEN 构造结合起来:

      ORDER BY CASE 
                  WHEN state = 'NC' THEN 1
                  WHEN state = 'North Carolina' THEN 2
                  ...
               END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        相关资源
        最近更新 更多