2015-10-12 10 views
15

Mam dwie tabele, jedna to "sprzedaż", a druga to "dostawy". Mam raport, który pokazuje całą "sprzedaż". Chcę zrobić łączenie, w którym mogę uzyskać całą sprzedaż, która nie jest dostarczana w porównaniu do tabeli dostaw, tylko wtedy, gdy klucz jest jedynym identyfikatorem. Chociaż jestem nowym programistą dla CI, chcę wiedzieć, jak to zrobić.Które sprzężenie jest odpowiednie dla mojej tabeli danych Ajax w CI

Poniżej przedstawiono kod zwracający wartości w siatce.

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

    } 

Tabele dostawy zostaną poniżej fileds

id czas data adres reference_no klient uwaga użytkownika updated_by

chcę tylko zaalarmował kod gdzie to będzie działa ny po prostu robi przyłącza, jeśli dotyczy.

+0

Każdy chce dostarczyć piękny odpowiedź? Plz –

Odpowiedz

4

Spróbuj tego kodu, powinien działać.

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

    } 
+0

Ale przycisk Akcja nie działa. –

0

To powinno zrobić. To bardzo surowa forma, ale masz pomysł.

//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 (); 
+0

Czy na pewno tutaj "gdzie" jest wymagane? – Sashi

+0

@Sashi No cóż, jeśli operat chce uzyskać wszystkie rekordy wtedy, gdy nie jest to potrzebne, ale od kiedy on/ona wspomniał * Id jest kluczowym punktem *, wymagana jest klauzula where, w ten sposób możemy rozpoznać rekord w tabela sprzedaży. – StudentX

+0

WYBIERZ "sprzedaż". * ZE SPRZEDAŻY LEFT OUTER DOŁĄCZ DOSTAW NA DO sales.id = dostawcy.id LIMIT 0, 30 – Sashi

1

Numer referencyjny to numer faktury w porównaniu z ogólnie tabelą sprzedaży. Więc spróbuj tego kodu poniżej i może on dostarczyć to, co naprawdę chcesz wypełnić z DB.

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

    } 
0

chcę tylko zaalarmował kod gdzie będzie to działa ny po prostu robi przyłącza, jeśli dotyczy.

Nie do końca to rozumiem, ale myślę, że szukasz zapytania, które pokazuje całą sprzedaż, która jeszcze nie została dostarczona.

Aby odpowiedzieć na pytanie, o LEFT JOIN jest właściwe, ponieważ będzie ona wrócić zestaw wyników, nawet jeśli rząd nie zostanie znaleziony w dostaw.

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

Właściwie każdy z tych zapytań będzie pracować dla Ciebie - Opposite of inner join