将MYSQL转换为Codeigniter

Bra*_*rad 1 mysql database select codeigniter

我正在尝试将MYSQL查询转换为codeigniter,并且没有真正快速.我正在尝试转换此查询

$conn->prepare("SELECT `id`,`song`,`artist`,`album`,`track`,`mix_name`,`date` FROM `podcasts` where mix_number = (SELECT MAX(mix_number) FROM podcasts) order by track asc");
Run Code Online (Sandbox Code Playgroud)

这是在我的模型中:

//$where = '(SELECT MAX(mix_number)from podcasts)';
$this->db->select('id,song,artist,album,track,mix_name,date, link');
//$this->db->where('mix_number', '(SELECT MAX(mix_number)from podcasts)');
$this->db->order_by('track', 'asc');
$query = $this->db->get('podcasts');
return $query->result();
Run Code Online (Sandbox Code Playgroud)

我的问题区域在where语句中.当我注释掉where语句时,我得到了数据.显然不是我想要的方式.

我这样做是因为我的下一个查询将是

("SELECT `id`,`song`,`artist`,`album`,`track`,`mix_name`,`date` FROM `podcasts` where mix_number = **(SELECT MAX(mix_number) FROM podcasts) - 1** order by track asc")
Run Code Online (Sandbox Code Playgroud)

并且直到(SELECT MAX(mix_number)FROM播客) - 3

关于写where语句的正确方法的任何想法?谢谢你的时间.

Wes*_*rch 5

设置where()to 的第三个参数false以防止CI将您传入的字符串更改为第二个参数,然后您可以执行子查询:

return $this->db
    ->select('id,song,artist,album,track,mix_name,date, link')
    ->where('mix_number', '(SELECT MAX(mix_number) from podcasts)', false)
    ->order_by('track', 'asc')
    ->get('podcasts')
    ->result();
Run Code Online (Sandbox Code Playgroud)

http://ellislab.com/codeigniter/user-guide/database/active_record.html

$this->db->where()接受可选的第三个参数.如果将其设置为FALSE,CodeIgniter将不会尝试使用反引号来保护您的字段或表名称.

对我来说,这会产生以下查询:

SELECT `id`, `song`, `artist`, `album`, `track`, `mix_name`, `date`, `link`
FROM (`podcasts`)
WHERE mix_number = (SELECT MAX(mix_number) from podcasts) ORDER BY `track` asc
Run Code Online (Sandbox Code Playgroud)