如何在mysql codeigniter

时间:2017-02-03 07:13:23

标签: php mysql codeigniter codeigniter-3

我有一个包含2个字段的表。 Id_user第一个字段和第二个字段类型的浏览器,我试图使用户最喜欢的浏览器用户总数的百分比。在我试图让她的查询结果与她的百分比不符之后,有什么不对?

|id_user|   name_item
--------------------------
|   1   |   safari      |
|   2   |   firefox     |
|   3   |   opera mini  |
|   4   |   safari      |
|   5   |   chrome      |   
|   6   |   firefox     |
|   7   |   chrome      |
|   8   |   chrome      |   
|   9   |   firefox     |
|   10  |   firefox     |       
|   11  |   safari      |
|   12  |   opera mini  |   

是预期的

|   safari      |   25% |
|   opera mini  |   17% |
|   firefox     |   33% |
|   chrome      |   25% |

控制器

public get_json() {
    $browser = $this->My_model->get_browser();
    foreach($browser as $row)
    {   
        $data['browser'] []= $row['browser'];
        $data['percentage'] []= $row['data_percentage'];
    }       
        header('content-type: application/json');   
        echo json_encode($data);  
}   

模型

function get_browser() {
    $query = $this->db->select('browser, 100 / count(*) as data_percentage')
                      ->from('tb_browser')
                      ->group_by('browser')
                      ->get();      
    return $query->result_array();  
}   

3 个答案:

答案 0 :(得分:1)

您应该将每个组的COUNT(*)除以表中的记录总数。对于后一个数量,您可以使用以下子查询:

SELECT COUNT(*) FROM tb_browser

以下是完整代码:

function detail_metagenome_microbe_grafik($trflp_code, $metacode) {
    $total = '(select count(*) from tb_browser)';
    $query = $this->db->select('concat(round((100*count(*))/'.$total.',0),"%") as data_percentage')
                  ->from('tb_browser')
                  ->group_by('browser')
                  ->get();      
    return $query->result_array();  
}

答案 1 :(得分:0)

试试这个,

$query = $this->db->select('browser, (count(*) / <total_rec_count>) *100 as data_percentage')
                  ->from('tb_browser')
                  ->group_by('browser')
                  ->get();      
return $query->result_array(); 

答案 2 :(得分:0)

需要获得实际总数才能进行计算

$query = $this->db->select('browser, (count(*) / (select count(*) from tb_browser)) *100 as data_percentage')

我在mysql上有点生疏,并且没有一个方便的实例......不幸的是mysql不支持OVER()