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'之后如何编写正确的查询?
答案 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