从数组中捕获数据

时间:2018-03-10 09:26:34

标签: php codeigniter-3

我有一个学生的数据,学校包括几个班,如A班,B班和C班,也有成绩。但是我想根据varibale的等级检索学生和班级数据。我试图这样做,但仍然没有出现数据。

示例:

tb_class

 ID   |  id_class | grade | 
 ---- | --------- |-------|
 1    |    A      |   1   |
 2    |    B      |   2   |
 3    |    C      |   1   |
 4    |    D      |   3   |
___________________________

tb_user

 ID   |  id_class | id_user  |
 ---- | --------- | -------- |
 1    |    A      |    002   |  
 2    |    B      |    008   |  
 3    |    B      |    005   |  
 4    |    A      |    006   |
 5    |    C      |    007   |
 6    |    C      |    003   |
 7    |    D      |    001   |   
______________________________

$grade= 1;

$query_grade = $this->db->select('id_class')
                    ->from('tb_class')
                    ->where('grade', $grade)
                    ->get()->result();

$data = array($query_grade);
$query_user = $this->db->select('id_user')
                       ->from('tb_user')
                       ->where_in('id_class', $data)
                       ->get()->result();
return $query_user;

我希望出现数据002,006,007,003

2 个答案:

答案 0 :(得分:1)

首先:您在错误的情况下向where_in提供数据,您应该将结果准备为正确的格式,如简单数组。

$query_grade = $this->db->select('id_class')
                    ->from('tb_class')
                    ->where('grade', $grade)
                    ->get()->result_array();

    foreach ($query_grade as $value)
    {
        $ids[] = $value['id_class'];
    }


$query_user = $this->db->select('id_user')
                       ->from('tb_user')
                       ->where_in('id_class', $ids)
                       ->get()->result();
return $query_user;

$ query_user将保存您的数据。

第二:如果上面的代码看起来很复杂,您可以使用下面的代码。

$query = $this->db->query("SELECT id_user FROM tb_user WHERE id_class IN(SELECT id_class FROM tb_class WHERE grade = '{$grade}')");
$data = $query->result();

您将获得适当的结果。

有时您无法使用查询构建器创建复杂查询。

答案 1 :(得分:0)

您可以尝试此查询

    $grade = 1;
    $this->db->select('id_class');
    $this->db->from('tb_class');
    $this->db->join('tb_user', 'tb_class.id_class = tb_user.id_class',array('id_user'));
    $this->db->where('grade', $grade);
    $query = $this->db->get();