Mysql按字段顺序给出错误的顺序

时间:2017-03-10 23:17:08

标签: mysql

provider_id可以是1,2,3

SELECT * FROM `news` order by field (provider_id, 1,3)

我希望它显示的是带有provider_id = 1然后是3的第一个记录,然后带有provider_id = 2

实际上它首先显示所有记录,其中provider_id = 2,然后只有1,3

当我想要列表时,首先只有1和3以及其他所有其他的provider_id'之后如何编写正确的查询?

1 个答案:

答案 0 :(得分:2)

为什么你会这么想?

FIELD返回列表中与第一个参数值匹配的索引,如果找不到则返回0,因此ORDER BY显然会对provider_id行进行排序先不是1或3。

要测试它,只需尝试添加值为field (provider_id, 1,3)的列,您就会自己看到:

SELECT *,field (provider_id, 1,3) FROM `news` order by field (provider_id, 1,3)

你可以简单地添加DESC(如果你想首先提供provider_id = 1,可以交换1和3):

SELECT * FROM `news` order by field (provider_id, 3, 1) DESC