我有一个MySQL查询:
SELECT * FROM tbl_post WHERE tbl_post.post_id NOT IN
(SELECT tbl_readsave.post_id FROM tbl_readsave)
我想将其转换为Codeigniter Active记录,因此我使用了以下代码段:
$this->db->select('tbl_readsave.post_id');
$queryReadSave = $this->db->get('readsave');
$this->db->where_not_in('post_id', $queryReadSave->result_array());
$queryNewPost = $this->db->get('readsave');
if($queryNewPost->num_rows()>0)
{
return $queryNewPost->result_array();
}
else
return false;
但是,代码会抛出一个错误,如下所示: -
Error Number: 1054
Unknown column 'Array' in 'where clause'
SELECT * FROM (`tbl_readsave`) WHERE `post_id` NOT IN (Array)
Filename: /var/www/html/teamF/tharjumal/models/webservice_model.php
Line Number: 28
如何将上述查询转换为Codeigniter Active Records格式?
答案 0 :(得分:2)
$queryReadSave->result_array()
返回一个数组数组。您无法在where_not_in
中使用它。
您需要循环并创建一个您不想要的ID的平面数组。
$this->db->select('post_id');
$queryReadSave = $this->db->get('readsave');
$postIDs = $queryReadSave->result_array();
$this->db->where_not_in('post_id', array_column($postIDs, 'post_id'));
$queryNewPost = $this->db->get('post');
array_column()
仅存在于PHP 5.5+中。如果您使用的是较低版本,则需要执行以下操作:
$this->db->select('post_id');
$queryReadSave = $this->db->get('readsave');
$postIDs = array_map(function($a){
return $a['post_id'];
}, $queryReadSave->result_array());
$this->db->where_not_in('post_id', $postIDs);
$queryNewPost = $this->db->get('post');
P.S。你的第二个表名为post
,对吧?您需要更新查询才能使用正确的表格。
更新:您的原始查询使用子查询,CodeIgniter本身不支持该查询。如果您想将此全部作为一个查询进行尝试,则可以使用我创建的子查询库(https://github.com/NTICompass/CodeIgniter-Subqueries)。
$this->db->select('*');
$this->db->from('post');
$sub = $this->subquery->start_subquery('where_in');
$sub->select('post_id')->from('readsave');
$this->subquery->end_subquery('post_id', FALSE);
$queryNewPost = $this->db->get();
答案 1 :(得分:1)
尝试以下代码:
5*4*2