Coalesce Mysql Datatable服务器端

时间:2018-05-29 02:48:50

标签: mysql codeigniter datatables

我想显示在rincian_order表中链接的mainproduk上的所有产品数据,但是如果rincian_order表中没有链接的产品数据我想通过将'omzet'填充为0来继续显示它,我输入代码“coalesce(sum(rincian_order.jumlah_pc)/ 6),0)作为omzet”它作为一个营业额,但这样的代码是错误的,任何人都可以帮忙吗?

  

错误号码:1054'字段列表'中的未知列'0)'

    $this->datatables->select("mainproduk.id as id_m,mainproduk.barcode as barcod,mainproduk.nomor_kemtan as nomor_kemtan,mainproduk.nama_produk as nama_produk,mainproduk.satuan as satuan,mainproduk.nama_alias as nama_alias,mainproduk.produk_jadi as produk_jadi,mainproduk.nama_alias as nama_alias,mainproduk.nama_alias as nama_alias,mainproduk.nama_alias as nama_alias,mainproduk.min_stok_kemasan as min_stok_kemasan,mainproduk.tipe_produk as tipe_produk,mainproduk.top_item as top_item,mainproduk.status as status, coalesce(sum(rincian_order.jumlah_pc)/6), 0) as omzet");
    $this->datatables->from("mainproduk");
    $this->datatables->join("rincian_order", "mainproduk.barcode = rincian_order.barcode", "left");
    $this->datatables->where("mainproduk.status =", "1");
    $this->datatables->where("rincian_order.tipe =", "po");
    $this->datatables->where("rincian_order.status !=", "canceled");
    $this->datatables->where("rincian_order.tanggal_kirim >=", "2017-11-01");
    $this->datatables->where("rincian_order.tanggal_kirim <=", "2018-04-30");
    $this->datatables->group_by("mainproduk.id");
    $this->db->order_by("mainproduk.id", "ASC");
    $this->datatables->add_column("view", "<a href='editproduk/$1'><span class='glyphicon glyphicon-edit' aria-hidden='true'></span></a> | <a href='logproduk/$1'><span class='fa fa-fw fa-history'></span></a>", "id_m");

    return $this->datatables->generate();

之前我设法使用下面的代码,但它在datatable serverside

上无效
SELECT mainproduk.id as id,
    mainproduk.barcode as barcod,
    mainproduk.nama_produk,
    mainproduk.nama_alias,
    mainproduk.satuan,
    mainproduk.produk_jadi,
    mainproduk.kemasan,
    mainproduk.min_stok_kemasan,
    mainproduk.status,
    mainproduk.top_item,
    mainproduk.tipe_produk,
    mainproduk.nomor_kemtan,
    coalesce(sum(R.jumlah_pc),0) as omzet
    FROM mainproduk
    LEFT JOIN
    (
        SELECT id,barcode, jumlah_pc
        FROM rincian_order WHERE tipe='po' AND status!='canceled' AND tanggal_kirim BETWEEN '2017-11-01' AND '2018-04-30'
    ) AS R
        ON mainproduk.barcode = R.barcode WHERE status=1 GROUP BY mainproduk.id ORDER BY mainproduk.id ASC

我的控制器

function json() {
    header('Content-Type: application/json');
    echo $this->ceklisqc_model->json();
}

我的脚本数据表服务器

    $(function () {

    $.fn.dataTableExt.oApi.fnPagingInfo = function(oSettings)
    {
      return {
        "iStart": oSettings._iDisplayStart,
        "iEnd": oSettings.fnDisplayEnd(),
        "iLength": oSettings._iDisplayLength,
        "iTotal": oSettings.fnRecordsTotal(),
        "iFilteredTotal": oSettings.fnRecordsDisplay(),
        "iPage": Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength),
        "iTotalPages": Math.ceil(oSettings.fnRecordsDisplay() / oSettings._iDisplayLength)
      };
    };

    var t = $("#example1").dataTable({
      initComplete: function() {
        var api = this.api();
        $('#example1_filter input')
        .off('.DT')
        .on('keyup.DT', function(e) {
          if (e.keyCode == 13) {
            api.search(this.value).draw();
          }
        });
      },
      oLanguage: {
        sProcessing: "loading..."
      },
      processing: true,
      serverSide: true,
      ajax: {"url": "json", "type": "POST"},
      columns: [
        {
          "data": "id_m",
          "orderable": false
        },
        {"data": "barcod"},
        {"data": "nomor_kemtan"},
        {"data": "nama_produk"},
        {"data": "satuan"},
        {"data": "nama_alias"},
        {"data": "produk_jadi"},
        {"data": "omzet"},
        {"data": "nama_alias"},
        {"data": "nama_alias"},
        {"data": "min_stok_kemasan"},
        {"data": "tipe_produk"},
        {"data": "top_item"},
        {"data": "status"},
        {"data": "view"}
      ],
      order: [[1, 'asc']],
        rowCallback: function(row, data, iDisplayIndex) {
          var info = this.fnPagingInfo();
          var page = info.iPage;
          var length = info.iLength;
          var index = page * length + (iDisplayIndex + 1);
          $('td:eq(0)', row).html(index);
        }
    });        
});

1 个答案:

答案 0 :(得分:0)

我认为你的select语句中只有一个小错字。改变这个:

coalesce(sum(rincian_order.jumlah_pc)/6), 0) as omzet

到此:

coalesce(sum(rincian_order.jumlah_pc) / 6, 0) as omzet

我最初评论过,因为您按mainproduk.id进行分组,但选择了许多非聚合列,因此您的查询无效。我不想这样说,因为它实际上看起来像其他列都来自同一个表mainproduk.idmainproduk表的主键,在这种情况下是什么你做的是有效的。