Какое соединение подходит для моей таблицы данных Ajax в CI

У меня есть две таблицы: один - это "продажи", а другой - "поставки". У меня есть отчет, который показывает все "продажи". Я хочу сделать соединение, где я могу получить все продажи, которые не поставляются по сравнению с таблицей поставок, только там, где идентификатор является единственным ключевым моментом. Хотя я новый разработчик для CI, я хочу знать, как это сделать.

Ниже приведен код, возвращающий значения в сетке.

function getdatatableajax()
   {
        if($this->input->get('search_term')) { $search_term = $this->input->get('search_term'); } else { $search_term = false;}

       $this->load->library('datatables');
       $this->datatables
            ->select("sales.id as sid, date, reference_no, biller_name, customer_name, total_tax, total_tax2, total, internal_note")
            ->select("sales.id = deliveries.id as sid date, reference_no, biller_name, customer_name, total_tax, total_tax2, total, internal_note")
            ->from('sales');
            $this->datatables->add_column("Actions", 
            "<center><a href='#' title='$2' class='tip' data-html='true'><i class='icon-folder-close'></i></a> <a href='#' onClick=\"MyWindow=window.open('index.php?module=sales&view=view_invoice&id=$1', 'MyWindow','toolbar=0,location=0,directories=0,status=0,menubar=yes,scrollbars=yes,resizable=yes,width=1000,height=600'); return false;\" title='".$this->lang->line("view_invoice")."' class='tip'><i class='icon-fullscreen'></i></a> 
            <a href='index.php?module=sales&view=add_delivery&id=$1' title='".$this->lang->line("add_delivery_order")."' class='tip'><i class='icon-road'></i></a>
            <a href='index.php?module=sales&view=pdf&id=$1' title='".$this->lang->line("download_pdf")."' class='tip'><i class='icon-file'></i></a> 
            <a href='index.php?module=sales&view=email_invoice&id=$1' title='".$this->lang->line("email_invoice")."' class='tip'><i class='icon-envelope'></i></a>
            </center>", "sid, internal_note")

        ->unset_column('sid')
        ->unset_column('internal_note');

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

   }

Таблицы "Доставка" имеют ниже подписи

id date time reference_no адрес клиента примечание user updated_by

Мне просто нужен предупрежденный код, где он будет работать, только если он будет выполняться, если это применимо.

Ответы

Ответ 1

Попробуйте этот код, он должен работать.

function getdatatableajax()
   {
        if($this->input->get('search_term')) { $search_term = $this->input->get('search_term'); } else { $search_term = false;}

       $this->load->library('datatables');
       $this->datatables
            ->select("sales.id as sid, sales.date as date, sales.reference_no as reference_no, sales.biller_name as biller_name, sales.customer_name as customer_name, sales.total_tax as total_tax, sales.total_tax2 as total_tax2, sales.total as total, internal_note as sintnote")
            ->from('sales')
            ->join(deliveries, 'sales.reference_no = deliveries.reference_no', 'left');
            $this->datatables->add_column("Actions", 
            "<center><a href='#' title='$2' class='tip' data-html='true'><i class='icon-folder-close'></i></a> <a href='#' onClick=\"MyWindow=window.open('index.php?module=sales&view=view_invoice&id=$1', 'MyWindow','toolbar=0,location=0,directories=0,status=0,menubar=yes,scrollbars=yes,resizable=yes,width=1000,height=600'); return false;\" title='".$this->lang->line("view_invoice")."' class='tip'><i class='icon-fullscreen'></i></a> 
            <a href='index.php?module=sales&view=add_delivery&id=$1' title='".$this->lang->line("add_delivery_order")."' class='tip'><i class='icon-road'></i></a>
            <a href='index.php?module=sales&view=pdf&id=$1' title='".$this->lang->line("download_pdf")."' class='tip'><i class='icon-file'></i></a> 
            <a href='index.php?module=sales&view=email_invoice&id=$1' title='".$this->lang->line("email_invoice")."' class='tip'><i class='icon-envelope'></i></a>
            </center>", "sid, internal_note")

        ->unset_column('sid')
        ->unset_column('internal_note');
       echo $this->datatables->generate();

   }

Ответ 2

Номер Ref - это номер счета, сравнимый с таблицей продаж в целом. Поэтому попробуйте этот код ниже и, возможно, он предоставит то, что вы действительно хотите заполнить из БД.

   function getdatatableajax()
   {
        if($this->input->get('search_term')) { $search_term = $this->input->get('search_term'); } else { $search_term = false;}

       $this->load->library('datatables');
       $this->datatables
            ->select("sales.id as sid, date, reference_no, biller_name, customer_name, total_tax, total_tax2, total, internal_note")
            ->from('sales')
            ->join(deliveries, 'sales.reference_no = deliveries.reference_no', 'left');


            $this->datatables->add_column("Actions", 
            "<center><a href='#' title='$2' class='tip' data-html='true'><i class='icon-folder-close'></i></a> <a href='#' onClick=\"MyWindow=window.open('index.php?module=sales&view=view_invoice&id=$1', 'MyWindow','toolbar=0,location=0,directories=0,status=0,menubar=yes,scrollbars=yes,resizable=yes,width=1000,height=600'); return false;\" title='".$this->lang->line("view_invoice")."' class='tip'><i class='icon-fullscreen'></i></a> 
            <a href='index.php?module=sales&view=add_delivery&id=$1' title='".$this->lang->line("add_delivery_order")."' class='tip'><i class='icon-road'></i></a>
            <a href='index.php?module=sales&view=pdf&id=$1' title='".$this->lang->line("download_pdf")."' class='tip'><i class='icon-file'></i></a> 
            <a href='index.php?module=sales&view=email_invoice&id=$1' title='".$this->lang->line("email_invoice")."' class='tip'><i class='icon-envelope'></i></a>

            </center>", "sid, internal_note")

        ->unset_column('sid')
        ->unset_column('internal_note');

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

   }

Ответ 3

Это должно быть сделано. Это очень грубая форма, но вы получаете эту идею.

//Select everything
$this->db->select (  '*'  );

//From sales
$this->db->from ( 'sales as s' );

//Where id of sales is equals to your id
$this->ci->db->where ( 's.id', $id );

//Join where id in sales is equals to id_sales in deliveries
$this->ci->db->join (  'deliveries as d', 's.id = d.id_sale' );

// Query
$query = $this->ci->db->get (  );

Ответ 4

Мне просто нужен предупрежденный код, где он будет работать, только если он будет выполняться, если это применимо.

Я не совсем понял это, но я думаю, что вы ищете запрос, который показывает все продажи, которые еще не были доставлены.

Чтобы ответить на ваш вопрос, LEFT JOIN подходит, потому что он вернет результирующий набор, даже если соответствующая строка не найдена в поставках.

SELECT * 
FROM sales s
LEFT JOIN deliveries d ON d.id = s.id
WHERE d.id = null;

Собственно, любой из этих запросов будет работать для вас - Напротив внутреннего соединения