У меня есть этот код, который выводит повторяющиеся строки, но когда я ищу их по отдельности в базе данных, появляются только 3 строки, но когда я использую объединение, 6 из них выходят, а 3 из них повторяются. Как мне избежать этого или как опустить дубликаты.
<?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);
}
}
?>
в настоящее время выводится:
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
Похоже, что из ваших объединений поступают дополнительные данные, которые приводят к образованию дубликатов.
Я считаю, что вам нужно добавить GROUP BY в конце вызова
Потенциально:
$this->db->group_by('refaccion1');
В основном, что вы хотите удалить из набора данных?
DISTINCT сам по себе ничего особенного в этом случае не сделает.
По сути, если вы опустите оператор select .. в некоторых результатах будут разные данные, вызывающие «дубликаты». Попробуйте выполнить запрос непосредственно в запросе SQL и посмотрите результаты.
Я также предлагаю сбросить
private $table = 'cm_proveedor, cm_compras, cm_valuacion, cm_valuacionr, cm_nomina, cm_empleado';
и меняется в вашей модели:
return $this->db->get($table);
в
return $this->db->get();
Метод, который вы используете, вы в основном объединяете дважды с каждым столбцом, FROM с несколькими таблицами — это старый устаревший метод выполнения JOIN. Эффективное объединение ваших столов дважды, что ухудшит производительность, и в этом нет абсолютно никакой необходимости.
Дальнейшая ссылка: SQL оставил соединение против нескольких таблиц в строке FROM?
Других решений пока нет …