2015-10-12 16 views
15

Ho due tabelle una è "vendite" e un'altra è "consegne". Ho un rapporto che mostra tutte le "vendite". Voglio fare un join in cui posso ottenere tutte le vendite che non vengono consegnate rispetto alla tabella delle consegne, solo dove l'ID è l'unico punto chiave. Sebbene io sia un nuovo sviluppatore per CI, voglio sapere come farlo.Quale join è adatto per la mia tabella di dati Ajax in CI

Di seguito è riportato il codice che riporta i valori nella griglia.

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

    } 

Le tabelle Consegne ha sotto Campi

id date time utente indirizzo reference_no cliente nota updated_by

Voglio solo il codice allertato dove vuole funziona ny solo facendo si unisce, se applicabile.

+0

Ognuno vuole fornire una risposta bella? Plz –

risposta

4

Prova questo codice, dovrebbe funzionare.

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

Ma il pulsante Azione non funziona. –

0

Questo dovrebbe fare. È una forma molto grezza, ma tu hai l'idea.

//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

Sei sicuro che qui 'dove' è richiesto? – Sashi

+0

@Sashi Bene, se op sta cercando di ottenere tutti i record quindi dove non è necessario, ma dal momento che ha menzionato * Id è il punto chiave *, la clausola where è richiesta, cioè come possiamo riconoscere un record nel tabella delle vendite. – StudentX

+0

SELECT 'vendite'. * DA vendite LEFT OUTER JOIN consegne ON sales.id = consegne.id LIMIT 0, 30 – Sashi

1

Il numero di riferimento è il numero di fattura confrontato in generale con la tabella delle vendite. Quindi prova questo codice qui sotto e può fornire ciò che vuoi veramente popolare dal 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

Voglio solo il codice allertato dove si lavora ny solo facendo si unisce, se applicabile.

Non ho capito bene questo, ma penso che stai cercando una query che mostra tutte le vendite che non sono ancora state consegnate.

per rispondere alla tua domanda, un LEFT JOIN è appropriato perché tornerà un set di risultati, anche se la riga corrispondente non viene trovato in consegne.

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

In realtà, uno qualsiasi di queste domande lavorerà per voi - Opposite of inner join

Problemi correlati