0

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

コードイグナイター:

$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 バージョンが機能しない理由を知っている人はいますか?

4

2 に答える 2

1

ORDER BY 句には、次の 2 つのパラメーターが必要です。

$this->db->order_by('B.completed', 'DESC');
于 2013-05-07T15:39:29.103 に答える
0

from()Active Record が句内のカンマ区切りのテーブル文字列を解析するかどうかはわかりません。from ... join ... onANSI 標準構文で書き直すことをお勧めします。

$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 には 2 つのパラメーターが必要です。

于 2013-05-07T16:00:32.030 に答える