簡體   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