我想使用CI Active Record方法来执行此查询,但它给我的结果与我在普通SQL中执行查询的结果不同。这是查询:CodeIgniter db select返回与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
笨:
$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版本不起作用?
请注意,您在SQL中使用'default_log_workout',在ActiveRecord中使用'log_workout'。也可能最好多次调用' - > where''而不是传递一个数组。它更清晰。 – deed02392 2013-05-07 15:40:05
使用'$ this-> db-> last_query()'并比较两者,看看有什么不同。应该帮助你缩小罪魁祸首。听起来像ORDER BY亲自,如果你得到错误的日期结果。 – 2013-05-07 19:00:59