我有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();
第一个查询返回一个字符串,例如
'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')
根据它的引用,它被视为单个值。如何获取第二个查询以执行我想要的方式?即
.... where `tblTracks`.`intGenreId` IN (1,2,3,4,8,6,5,7,45,66)
答案 0 :(得分:9)
可以将多个值作为where_in
传递给array
子句。
可以使用trim()
删除字符串开头和结尾的引号:
$dj_genres = trim($genres->strDJGenres, "'");
然后可以将此字符串转换为 字符串数组 ,以传递给第二个查询的where_in
子句。
$dj_genres_array = explode(",", $dj_genres);
或者,如果您需要 整数数组 :
$dj_genres_int_array = array_map('intval', $dj_genres_array);
您可以将结果数组添加到第二个查询中:
// ...
->where_in('tblTracks.intGenreId', $dj_genres_array)
// ...
或者:
// ...
->where_in('tblTracks.intGenreId', $dj_genres_int_array)
// ...
答案 1 :(得分:1)
JLeft给出的答案:
可以使用以下函数删除字符串开头和结尾的引号:
$dj_genres = trim($genres->strDJGenres, "'");
然后可以将此字符串转换为字符串数组,以传递给第二个查询的where_in子句。
$dj_genres_array = explode(",", $dj_genres);
如果你需要一个整数数组,可以这样生成:
$dj_genres_int_array = array_map('intval', $dj_genres_array);
工作得非常好......谢谢JLeft