2016-05-10 4 views
0

Ich habe diesen Code, der wiederholt Zeilen ausgibt, aber wenn ich suche sie einzeln in der Datenbank nur 3 Zeilen apear, aber wenn ich verbinde 6 von sie kommen heraus und 3 von ihnen werden wiederholt. Wie vermeide ich dies oder wie kann ich die Duplikate weglassen?Wie mache ich eine distinct auf eine Join-Abfrage mit codeigniter oder nur um Duplikate zu vermeiden

<?php 
class Joins_model extends CI_Model{ 
    private $table = 'cm_proveedor, cm_compras, cm_valuacion, cm_valuacionr, cm_nomina, cm_empleado'; 
    function _construct(){ 
     parent::Model(); 
    } 

    function get_reg($data){ 
     $this->db->distinct(); 
     $this->db->select(' 
         cm_proveedor.nombre, 
         cm_valuacion.mano_obra, 
         cm_valuacion.refaccion, 
         cm_valuacionr.refaccion, 
         cm_valuacion.costoHojalateria, 
         cm_valuacion.costoPintura, 
         cm_valuacion.costoMecanica, 
         cm_valuacion.pv_hojalateria, 
         cm_valuacion.pv_pintura, 
         cm_valuacion.pv_mecanica, 
         cm_valuacion.pc_hojalateria, 
         cm_valuacion.pc_pintura, 
         cm_valuacion.pc_mecanica, 
         cm_valuacion.tipo, 
         cm_valuacion.hojalateria, 
         cm_valuacion.pintura, 
         cm_valuacion.mecanica, 
         cm_valuacion.tipo_r, 
         cm_empleado.nombre, 
         cm_compras.precio 
        '); 

     $this->db->from('cm_proveedor'); 
     $this->db->join('cm_compras','cm_proveedor.id = cm_compras.id_proveedor'); 
     $this->db->join('cm_valuacion','cm_compras.id_siniestro = cm_valuacion.id_siniestro'); 
     $this->db->join('cm_valuacionr','cm_valuacion.id_siniestro = cm_valuacionr.id_siniestro'); 
     $this->db->join('cm_nomina','cm_valuacionr.id_siniestro = cm_nomina.id_siniestro'); 
     $this->db->join('cm_empleado','cm_nomina.id_empleado = cm_empleado.id'); 
     $this->db->where('cm_valuacion.id_siniestro',$data); 
     //$this->db->order_by('id','asc'); 

     return $this->db->get($table); 

    } 

} 
?> 

derzeit ausgibt:

name   mano_obra  cH cP cM mecanica tipo_r empleado precio nomina refaccion refaccion1 
MyStore  CAMBIO DE RADIADOR 0 0 0 250  0 DAVID 1850.00 89.00 REDIADOR REDIADOR 

MyStore  CAMBIO DE RADIADOR 0 0 0 250  0 DAVID 150.00 89.00 REDIADOR REDIADOR 

MyStore  CAMBIO DE RADIADOR 0 0 0 250  0 DAVID 1850.00 89.00 REDIADOR RADIADOR 

MyStore  CAMBIO DE RADIADOR 0 0 0 250  0 DAVID 150.00 89.00 REDIADOR RADIADOR 

MyStore  CAMBIO DE RADIADOR 0 0 0 250  0 DAVID 1850.00 89.00 REDIADOR ANTICONGELANTE 

MyStore  CAMBIO DE RADIADOR 0 0 0 250  0 DAVID 150.00 89.00 REDIADOR ANTICONGELANTE 
+0

Suchen Sie sich nur auf das erste Ergebnis aus dem Datensatz zurückgeben? –

+0

@BrianRamsey Ich möchte Zeilen nicht wiederholen, die bereits ausgegeben wurden – learningbyexample

Antwort

0

Es scheint, dass es zusätzliche Daten werden von Ihnen mitgebracht Joins wodurch die Duplikate gebildet werden.

Ich glaube, Sie brauchen

Potenziell eine GROUP BY am Ende des Gesprächs hinzuzufügen:

$this->db->group_by('refaccion1'); 

Im Grunde, was sind Sie aus dem Datensatz zu entfernen suchen? DISTINCT alleine wird in diesem Fall nicht viel tun.

Grundsätzlich, wenn Sie die Select-Anweisung weggelassen .. es würde verschiedene Daten in einigen Ergebnissen verursachen die "Duplikate". Versuchen Sie, die Abfrage direkt in der SQL-Abfrage auszuführen, und sehen Sie sich die Ergebnisse an.

Ich schlage vor, fallen auch

private $table = 'cm_proveedor, cm_compras, cm_valuacion, cm_valuacionr, cm_nomina, cm_empleado'; 

und in Ihrem Modell zu ändern:

return $this->db->get($table); 

zu

return $this->db->get(); 

Die Methode, die Sie Ihnen zu jeder Spalte im Grunde schließen sich zweimal verwenden, FROM mit mehreren Tabellen ist die alte abgeschriebene Methode, JOINs auszuführen. Fügen Sie Ihre Tische zweimal effektiv zusammen, was die Leistung beeinträchtigt und absolut unnötig ist.

Weitere Referenz: SQL left join vs multiple tables on FROM line?

+0

Was ist group_by() Hauptfunktion? – learningbyexample

+1

https://dev.mysql.com/doc/refman/5.1/en/group-by-handling.html – mic

+0

Wie entscheide ich, welches die beste Wahl für die Gruppierung ist, da ich einen beliebigen Tabl_Namen wählen kann? Ihre Antwort hat mir geholfen, mein Problem zu lösen, aber die Abfrage dauert zu lange. @brianRamsey – learningbyexample