到目前为止,我已经尝试了几种不同的方法来解决这个问题。我收到此错误消息:
'where子句'中的未知列'Array'
SELECT * FROM(Articles
)WHERE id
IN(数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array)
这是我的型号代码:
function getStarNews($user_id) {
$this->db->select('id');
$this->db->where('user_id', $user_id);
$query = $this->db->get('table1');
foreach ($query->result_array() as $id)
{
//echo $id['id']."<br>"; //displays all of the correct ids I am trying to pass to the where_in()
}
$id = $query->result_array();
$this->db->where_in('id', $id); //pass array of 'id' from above query
$data = $this->db->get('Articles');
return $data->result_array();
}
如果我改变id数组只包含1个值,那么where_in()子句工作正常并输出与单个'id'匹配的数据行。
我已经遍布堆栈和谷歌寻求使用where_in()的帮助,我认为我有一切正确或尝试了几种不同的方法来正确传递数组。
感谢您的帮助。
编辑:最后,我将使用我的控制器输出此数据:
$this->output->set_output(json_encode($data));
出于测试目的,我只是跳过JSON并尝试直接从模型中使用PHP输出数据。
答案 0 :(得分:12)
您尝试传递的数组是一个多维数组。相反,试试这个:
$ids = array(); foreach ($query->result_array() as $id) { $ids[] = $id['id']; } $this->db->where_in('id', $ids);
您不能在没有迭代的情况下展平query-&gt; result_array()。但是,如果您需要在应用程序中处理这种类型的查询,并且如果安装了&gt; = PHP 5.3,则可以将以下函数放在Codeigniter帮助文件(或其他合适的地方)中,以帮助您展平数组:
function flatten(array $array) { $return = array(); array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; }); return $return; }
在你的情况下使用它:
$ids = flatten($query->result_array()); $this->db->where_in('id', $ids);