代码点火器 - 从where_in中删除单引号

Fra*_*ser 4 activerecord codeigniter

我有2个查询:

$genres = $this->db->select('Group_Concat(intGenreId) strDJGenres')
                                ->from('tblDJGenres')
                                ->where('intDJId', $this->session->userdata('non_admin_userid'))
                                ->get()
                                ->row();

            $results = $this->db->select('tblTracks.*, tblGenres.strName as strGenreName')
                                ->from('tblTracks')
                                ->join('tblGenres', 'tblTracks.intGenreId = tblGenres.intGenreId', 'left')
                                ->where_in('tblTracks.intGenreId', $genres->strDJGenres)
                                ->get()
                                ->result();
Run Code Online (Sandbox Code Playgroud)

第一个查询返回一个字符串,如

'1,2,3,4,8,6,5,7,45,66'

我在第二个查询的where_in子句中使用它.问题是,使用此字符串,它正在编写SQL,如:

SELECT `tblTracks`.*, `tblGenres`.`strName` as strGenreName FROM (`tblTracks`) LEFT JOIN `tblGenres` ON `tblTracks`.`intGenreId` = `tblGenres`.`intGenreId` WHERE `tblTracks`.`intGenreId` IN ('1,2,3,4,8,6,5,7,45,66') 
Run Code Online (Sandbox Code Playgroud)

使用它周围的引用,它被视为单个值.如何获取第二个查询以执行我想要的方式?即

.... where `tblTracks`.`intGenreId` IN (1,2,3,4,8,6,5,7,45,66) 
Run Code Online (Sandbox Code Playgroud)

jle*_*eft 9

可以将多个值作为传递给where_in子句array.


可以使用trim()以下命令删除字符串开头和结尾的引号:

$dj_genres = trim($genres->strDJGenres, "'");
Run Code Online (Sandbox Code Playgroud)

然后可以将此字符串转换为字符串数组,以传递给where_in第二个查询的子句.

$dj_genres_array = explode(",", $dj_genres);
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要一个整数数组:

$dj_genres_int_array = array_map('intval', $dj_genres_array);
Run Code Online (Sandbox Code Playgroud)

您只需将结果数组添加到第二个查询中:

// ...    
->where_in('tblTracks.intGenreId', $dj_genres_array)
// ...
Run Code Online (Sandbox Code Playgroud)

要么:

// ...    
->where_in('tblTracks.intGenreId', $dj_genres_int_array)
// ...
Run Code Online (Sandbox Code Playgroud)