我在 codeigniter 模型中使用以下 mysql 查询:
$query = 'SELECT t.*, p.id as project_id, p.name as project_name, p.archive as project_archive
FROM project p
JOIN user_project up ON p.id = up.project AND up.user = '.$user.'
LEFT JOIN (SELECT tmp.* FROM
(SELECT *, IF( @prev <> project_id, @rownum := 1, @rownum := @rownum+1 ) AS rank, @prev := project_id
FROM task t
JOIN (SELECT @rownum := NULL, @prev := 0) AS r
WHERE user_id = '.$user.' AND status < 3
ORDER BY t.project_id) AS tmp
WHERE tmp.rank <= 1) AS t ON p.id = t.project_id
ORDER BY p.id desc, t.status desc';
$get = $this->db->query($query);
if($get->num_rows > 0)
return $get->result_array();
return array();
这工作正常,但我现在想从同一个表中检索一个附加列作为 id 和 name。列名称是“archive”,我尝试添加
p.archive as project_archive
到第一行的末尾,但当我尝试在 View 中使用此变量时,它给了我一个“ undefined index :project_archive”错误。为了确保数据库中的一切正确,我将第一行更改为
$query = 'SELECT t.*, p.id as project_id, p.archive as project_name
正如预期的那样,存档值作为项目名称打印出来。那么为什么我不能添加额外的 p.archive 作为project_archive???我的 Controller 和 View 代码如下
Controller :
public function index()
{
$this->title = 'Dashboard';
$this->menu = 'users|new_project';
//Load models
$this->load->model('project_model');
$this->load->model('task_model');
// Load tasks
$data['tasks'] = $this->task_model->get_user_tasks($this->session->userdata('user'));
$data['page_title'] = "Dashboard";
$data['status_arr'] = $this->task_model->get_status_array();
// Load View
$this->load->view('dashboard', $data);
}
在 View 中我调用以下内容:
$tasks['project_archive'] <!-- undefined index error -->
$task['project_id'] <!-- working as expected -->
$task['project_name'] <!-- working as expected -->
最佳答案
哦。结果索引未定义的原因是代码需要在 foreach 循环中给出一个值,而不是在 foreach 循环之外调用并获取数组。
关于php - Codeigniter mysql 查询中未定义索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241405/