【问题标题】:Code Igniter - remove single quotes from where_inCodeigniter - 从 where_in 中删除单引号
【发布时间】:2013-04-05 13:25:41
【问题描述】:

我有 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) 

【问题讨论】:

  • 您是否尝试过使用 preg_replace 并将单引号替换为空?

标签: codeigniter activerecord


【解决方案1】:

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


可以使用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)
// ...

【讨论】:

  • 我正在向where_in 添加一个子查询,所以我修剪了字符串,使用字符串替换函数,但它没有帮助。你能建议我吗?这里是我的question
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 2022-01-16
    • 1970-01-01
    • 2020-03-26
    • 2021-10-28
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多