我试图在CodeIgniter中调用2个连续查询,第一个查询有一个order-by子句。问题是,CodeIgniter正在尝试对第二个查询使用order-by子句并抛出错误。
代码看起来像这样:
...
$sql = $this->db->get_where('expenses',array('category_id' => $category_id));
$this->db->order_by("date", "asc");
$data = $sql->result_array();
foreach($data as $expense_rec)
{
$expense_id = $data['expense_id'];
$sql2 = $this->db->get_where('expense_details',array('expense_id' => $expense_id));
$detail_rec = $sql2->result_array();
}
...
对于第二个查询,脚本会引发以下错误:
Unknown column 'date' in 'order clause'
SELECT * FROM (`expense_details`) WHERE `expense_id` = '4' ORDER BY `date` asc
有没有办法在调用第二个查询之前重置order-by?
我正在使用CodeIgniter 1.7
P.S。我知道我可以将两个查询合并为一个,但我很想知道上面的代码是否有办法在CodeIgniter中工作。
答案 0 :(得分:8)
运行查询会重置它。
您在运行查询后放置order_by()
,因此它不会影响初始查询,但会开始构建下一个查询。
而不是......
$sql = $this->db->get_where('expenses',array('category_id' => $category_id));
$this->db->order_by("date", "asc");
$data = $sql->result_array();
这样做......
$this->db->order_by("date", "asc");
$sql = $this->db->get_where('expenses',array('category_id' => $category_id));
$data = $sql->result_array();
答案 1 :(得分:2)
您可以使用$this->db->_reset_select()
来解决问题。
答案 2 :(得分:2)
我遇到了类似的问题。就我而言,我正在根据用户输入构建查询。在构建查询的过程中,可能存在导致我停止构建查询并退出模型的问题。但是,如果在此之后使用其他Active Record调用调用其他模型,则会添加先前构建的查询,这绝对不是我的意图。
我为解决这个问题所做的是将DB对象复制到一个新变量,并将其用于我的查询构建。该变量只存在于该模型中,因此在它影响其他模型之前被销毁。所以:
$new_db = $this->db;
$new_db->where('user_status', 1);
等