Coalesce Mysql Datatable серверная часть - PullRequest
0 голосов
/ 29 мая 2018

Я хочу отобразить все данные о продукте в основном продукте, связанном в таблице rincian_order, но если в таблице rincian_order нет связанных данных о продукте, я хочу продолжать отображать их, заполнив «omzet» как 0, я ввожу код"coalesce (sum (rincian_order.jumlah_pc) / 6), 0) as 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();

Мне уже удавалось использовать приведенный ниже код, но он не работал на серверах с данными> 1008 *

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();
}

мой сценарий datatables на стороне сервера

    $(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 голосов
/ 29 мая 2018

Я думаю, у вас есть небольшая опечатка в вашем утверждении select.Измените это:

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

на следующее:

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

Я первоначально прокомментировал, что, поскольку вы группируете по mainproduk.id, но выбираете много неагрегированных столбцов, ваш запрос недействителен.Я отказываюсь говорить это, потому что на самом деле все столбцы выглядят так, как будто все из одной таблицы и , что mainproduk.id является первичным ключом для таблицы mainproduk, и в этом случае то, что вы делаете, действительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...