[英]get the result of select query with different database in codeigniter
[英]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.