重新排列IN子句输出

时间:2016-09-06 09:23:57

标签: php mysql codeigniter

我有一个IN子句查询,我在其中传递了此ID' S (10,19,23,24,28,33,45,46,1,4,7,8,12,16,18,22,29)

我的查询是,  的 SELECT {post_jobs {1}} ID为. {post_jobs {1}} ID为FROM 它正确执行并返回结果首先id喜欢1然后4然后7等等......这是升序

我的需要是获得id 10然后19然后23的第一个结果,因为我传递的ID的顺序是有任何方式在输出中获得这种类型的结果。

2 个答案:

答案 0 :(得分:1)

试试这个

SELECT post_jobs.id FROM post_jobs WHERE id 
IN(10,19,23,24,28,33,45,46,1,4,7,8,12,16,18,22,29) ORDER BY 
FIELD(id,10,19,23,24,28,33,45,46,1,4,7,8,12,16,18,22,29);

在Codeigniter中

$this->db->_protect_identifiers = FALSE; 
$this->db->select('id'); 
$this->db->where_in('id',array(10,19,23,24,28,33,45,46,1,4,7,8,12,16,18,22,29));
$this->db->order_by('FIELD(id, 10,19,23,24,28,33,45,46,1,4,7,8,12,16,18,22,29)'); 
$this->db->get('post_jobs');

如果您使用的是codeigniter 3,则写入或删除protect_identifiers行

$this->db->protect_identifiers(False);

答案 1 :(得分:1)

试试这个

SELECT post_jobs.id FROM post_jobs WHERE post_jobs.id 
IN(10,19,23,24,28,33,45,46,1,4,7,8,12,16,18,22,29) ORDER BY 
FIND_IN_SET(post_jobs.id,10,19,23,24,28,33,45,46,1,4,7,8,12,16,18,22,29);