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 调用最终返回最旧的行,而不是下一个最旧的行。我认为这只是我的 CI 调用中的语法错误......但我无法弄清楚。我已经开始解决这个问题,$this->db->query("the SQL")但这仍然困扰着我。

任何人都知道为什么 CI 版本不起作用?

4

2 回答 2

1

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

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

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

$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 应该有两个参数。

于 2013-05-07T16:00:32.030 回答