PHP 循环 - 显示倍数


PHP Loop - showing multiples

我的数据库表看起来像这样(粗略的轮廓):

    +--------+-----------+-------------+---------+------------+------------+
    | log_id | host_name |   status    | host_id | profile_id | event_date |
    +--------+-----------+-------------+---------+------------+------------+
    |   1    |   site1   |   Online    |    2    |    1       |  <*date*>  |
    +--------+-----------+-------------+---------+------------+------------+
    |   2    |   site1   |   Online    |    2    |    1       |  <*date*>  |
    +--------+-----------+-------------+---------+------------+------------+
    |   3    |   site1   |   Offline   |    2    |    1       |  <*date*>  |
    +--------+-----------+-------------+---------+------------+------------+
    |   4    |   site2   |   Online    |    4    |    1       |  <*date*>  |
    +--------+-----------+-------------+---------+------------+------------+ 
    |   5    |   site2   | Maintenance |    4    |    1       |  <*date*>  |
    +--------+-----------+-------------+---------+------------+------------+

这是我的代码:

VIEW:
<?php foreach($result as $row): ?> 
  ['<?php echo $row->host_name;?>',<?php echo $this->help_model->filter_online($id,$row->host_id, 'Online');?>,
  <?php echo $this->help_model->filter_online($id,$row->host_id, 'Offline');?>,
  <?php echo $this->help_model->filter_online($id,$row->host_id,'Maintenance');?>],
 <?php endforeach; ?> 
CONTROLLER:
public function userreports()
    {       
        $data['id']=$this->session->userdata('profile_id');
        $this->session->set_userdata('from_date', '2015-01-01');
        $from_date = $this->session->userdata('from_date');
        $date = date('Y-m-d',now());
        $this->session->set_userdata('to_date', $date);
        $to_date = $this->session->userdata('to_date');
        $data['result'] = $this->help_model->all_logs($this->session->userdata('profile_id'));
        $this->load->view('squidtopus1-host-reports', $data);
    }
MODEL:
function all_logs($id)
    {
        $id = $this->session->userdata('profile_id');
        $this->db->select("*");
        $this->db->from('server_log');
        $this->db->where('profile_id',$id);
        $query = $this->db->get()->result();
        return $query;
    }
function filter_online($data, $host_id, $status)
    {
        $from_date = $this->session->userdata('from_date');
        $to_date = $this->session->userdata('to_date');
        $id = $this->session->userdata('profile_id');
        $this->db->select()->from('server_log');
        $this->db->where('profile_id',$id);
        $this->db->where('status',$status);
        $this->db->where('host_id',$host_id);
        $this->db->where('event_date >=',$from_date);
        $this->db->where('event_date <=',$to_date);
        $data =  $this->db->get()->result();
        $stat_count = 0;
        foreach ($data as $row) {
            $stat_count++;
        }
        return $stat_count;
    }

需要显示的信息正确显示,但问题是它为数据库中与"profile_id = $id"匹配的每一行(在本例中为 profile_id=1)重复显示它。理想情况下,它应该显示:

['site1', 2,1,0], ['site2', 1,0,1]

但相反,它显示:

['site1', 2,1,0],['site1', 2,1,0],['site1', 2,1,0],['site2', 1,0,1],['site2', 1,0,1]

无法确定我哪里出错了...因此,非常感谢任何解决此问题的见解。提前谢谢!

function all_logs($id)
{
    $id = $this->session->userdata('profile_id');
    $this->db->select("DISTINCT(host_id), host_name");
    $this->db->from('server_log');
    $this->db->where('profile_id',$id);
    $query = $this->db->get()->result();
    return $query;
}

尝试像上面一样更改您的功能