【发布时间】:2023-03-22 03:07:01
【问题描述】:
我正在尝试将 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");
这是在我的模型中:
//$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();
我的问题区域在 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")
一直到 (SELECT MAX(mix_number) FROM podcasts) - 3
关于编写 where 语句的正确方法有什么想法吗?感谢您的宝贵时间。
【问题讨论】:
-
非常相似的问题 stackoverflow.com/questions/15212189/… - 你不能在 CI 中直接使用活动记录进行子查询
-
您是否将 where 语句(如所写)称为子查询?
-
是的,它是查询中的查询,因此称为子查询。 CI 活动记录没有用于子查询的本机语法。但是,如果您对下面的 Wesleys 解决方案感到满意,我很高兴。
-
你为什么要使用不可读的 CI 活动记录表示法? SQL 是用于数据集操作的标准且众所周知的抽象语言。你为什么要抽象一个抽象?如果您使用 $this->db->query() 方法并编写普通 SQL,您的代码将更具可读性。
-
@PatrickSavalle 在这篇文章中是一个不好的例子,但它主要用于构建动态查询(
if ($condition) $this->db->where($x) if ($otherCondition) $this->db->order_by($y)..etc。这比你自己将 SQL 字符串混合在一起更好。另一个原因是标准化不同数据库的不一致供应商(尽管大多数人使用 MySQL)。yadda yadda。
标签: mysql database codeigniter select