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语句的正确方法的任何想法?谢谢你的时间.
设置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)
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |