繁体   English   中英

CodeIgniter数据库选择返回的结果与SQL查询不同

[英]CodeIgniter db select returns different result than SQL query

我想使用CI Active Record方法执行此查询,但是与使用普通SQL执行查询相比,它提供的结果不同。 这是查询:

SELECT B.id as id
FROM default_log_workout A, default_log_workout B
WHERE A.id=$id AND B.completed < A.completed AND A.workout_id=B.workout_id
ORDER BY B.completed desc
LIMIT 1

CodeIgniter:

$this->db->select("B.id as id");
$this->db->from("log_workout A, log_workout B");
$this->db->where(array("A.id" => $id, "B.completed < A.completed", "A.workout_id=B.workout_id"));
$this->db->order_by("B.completed desc");
$this->db->limit(1);
$res = $this->db->get();

该查询应基于给定的“ id”返回下一个较旧的行。 普通的SQL有效,CI调用最终返回OLDEST行,而不是下一个最旧的行。 我认为这只是我的CI调用中的语法错误...但是我无法弄清楚。 此后,我继续使用$this->db->query("the SQL")解决问题,但这仍然困扰着我。

有人知道为什么CI版本不起作用吗?

ORDER BY子句应具有两个参数:

$this->db->order_by('B.completed', 'DESC');

我不确定Active Record是否会在from()子句中解析逗号分隔的表字符串。 我建议from ... join ... on语法from ... join ... on以ANSI标准重写它。

$this->db->select("B.id as id");
$this->db->from("log_workout A");
$this->db->join("log_workout B","A.workout_id = B.workout_id AND B.completed < A.completed");
$this->db->where("A.id" => $id);
$this->db->order_by("B.completed", "desc");
$this->db->limit(1);
$res = $this->db->get();

而且,正如Yan所指出的,order by应该具有两个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM