【问题标题】:SQL order by content of IN statement [duplicate]SQL按IN语句的内容排序[重复]
【发布时间】:2012-06-11 03:14:38
【问题描述】:

可能重复:
Ordering by the order of values in a SQL IN() clause

我有一个简单的查询语句,它通过邮政编码提取数据库中的属性。我使用 IN() 语句传入多个邮政编码。如果这些邮政编码是有序的(离目标邮政编码越来越远),是否可以按照邮政编码传递到 IN() 语句中的顺序对结果进行排序?

例如说我有邮政编码:77808、77805、77806、77807。我将它们传递到我的查询中

$query = "SELECT * FROM Properties WHERE zip_code IN('77808', '77805', '77806', '77807',)";

我可以按邮政编码为 77808、然后是 77805、然后是 77806 等的属性对结果进行排序吗?还是在我用 PHP(在这种情况下)将它从数据库中拉出后需要订购它?

【问题讨论】:

标签: php sql


【解决方案1】:

如果你使用Mysql,那么你可以使用FIELD函数。

SELECT * FROM Properties 
WHERE zip_code IN('77808', '77805', '77806', '77807')
ORDER BY FIELD(zip_code, '77808', '77805', '77806', '77807')

【讨论】:

    【解决方案2】:
    SELECT * FROM (
       SELECT 1 as my_order, p.* FROM Properties p WHERE zip_code = '77808'
       UNION ALL
       SELECT 2 as my_order, p.* FROM Properties p WHERE zip_code = '77805'
       UNION ALL 
       SELECT 3 as my_order, p.* FROM Properties p WHERE zip_code = '77806'
       UNION ALL
       SELECT 4 as my_order, p.* FROM Properties p WHERE zip_code = '77807'
    ) temp_table
    ORDER BY my_order ASC
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2011-01-31
    • 2011-02-10
    • 2012-05-25
    • 2010-09-28
    • 2017-08-10
    相关资源
    最近更新 更多