Как сделать отдельный запрос на объединение с использованием codeigniter или просто исключить дубликаты

У меня есть этот код, который выводит повторяющиеся строки, но когда я ищу их по отдельности в базе данных, появляются только 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

0

Решение

Похоже, что из ваших объединений поступают дополнительные данные, которые приводят к образованию дубликатов.

Я считаю, что вам нужно добавить 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?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]