簡體   English   中英

Codeigniter 檢索列中出現次數最多的前 5 行

[英]Codeigniter retrieve top 5 most occurring rows in column

我目前正在使用 codeigniter 3 來構建網站。 我已經能夠使用數據庫和活動記錄構建一個完整的畫廊和購物車系統。 以及后端。 我目前正在使用 charts.js 在網站上 5 個最暢銷產品的后端構建餅圖。 我還將使用折線圖制作按小時銷售的商品的圖表。 我可以讓圖表顯示虛擬數據沒有問題,但是我遇到了嘗試從數據庫中檢索正確數據的問題。 看來查詢將非常復雜。

我的 mysql 表名為order_items 在訂單項中有一個列qty和一個列product_type 兩者都返回整數。 我需要的是找出哪五件商品的銷量最多。 最終,我需要將數據添加到我的 charts.js 設置中,如下所示。 任何對 codeigniter 活動記錄具有高級經驗的人?

var pieData = [{
    value : 300,
    color : "#F7464A",
    highlight : "#FF5A5E",
    label : "Product 1"
}, {
    value : 125,
    color : "#46BFBD",
    highlight : "#5AD3D1",
    label : "Product 2"
}, {
    value : 100,
    color : "#FDB45C",
    highlight : "#FFC870",
    label : "Product 3"
}, {
    value : 40,
    color : "#949FB1",
    highlight : "#A8B3C5",
    label : "Product 4"
}, {
    value : 20,
    color : "#4D5360",
    highlight : "#616774",
    label : "Product 5"
}];

我想你應該試試這個腳本,

$data = $this->db->select('*')
                 ->from('order_items,SUM(qty) as total_qty')
                 ->order_by('total_qty','desc')
                 ->limit(5)
                 ->group_by('product_id')
                 ->get()->result_array();

我使用 php 找到了我自己的解決方案,以防其他人偶然發現這一點。 如果使用 mysql 有更好的方法來做到這一點,我會很高興學到一些東西。 這是我的 php 函數得到我需要的結果。

$query = $this -> db -> get('order_items');
$array = array();
foreach ($query -> result() as $result) {
    $key = $result -> product_id;
    $value = $result -> qty;
    if (!isset($array[$key])) {
        $array[$key] = $value;
    } else if (array_key_exists($key, $array)) {
        $old = $array[$key];
        $array[$key] = $value + $old;
    } 
}
arsort($array);
$newArray = array_slice($array, 0, 5, true);
return $newArray;

在過去的幾個小時里,我做了一些 mysql 教程,學到了很多關於 join、order 和 limit 的知識。 下面是我最終用來得到我需要的東西。

$select = array('products.name as label', 'sum(order_items.qty) as value');
$final = $this -> db -> select($select)
               -> from('products') 
               -> join('order_items', 'order_items.product_id = products.id', 'left') 
               -> group_by('products.id') 
               -> order_by('value', 'DESC') 
               -> limit(5) 
               -> get() -> result_array();

嘗試這個

$data = $this->db->select('id, product_id, SUM(quantity) as total_qty')
                 ->from('table')
                 ->order_by('total_qty','desc')
                 ->limit(5)
                 ->group_by('product_id')
                 ->get()->result_array();
public function getAllBestsaller() {  

    $result = array();
    $returndata = array();
    $this->db->select("*, SUM(total_sale) as total_sale");
    $this->db->from("{$this->tblproducts}");

    $this->db->where('isactive', 1 );
    $this->db->order_by('total_sale','desc');
    $this->db->limit(2);
    $this->db->group_by('product_id');
    $aQuery = $this->db->get();
    $this->db->last_query();
    if($aQuery -> num_rows() >0 ){
        $returndata = $aQuery->result();
    }
    return $returndata;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM