php - 如何使用 codeigniter 对连接查询执行不同操作或只是省略重复项

标签 php mysql codeigniter join

我有这段代码,它确实输出重复的行,但是当我在数据库中单独查找它们时,只出现 3 行,但是当我使用 join 时,会出现 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 left join vs multiple tables on FROM line?

关于php - 如何使用 codeigniter 对连接查询执行不同操作或只是省略重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37149759/

相关文章:

mysql - 无法打开mysql

mysql - 如何在 MySQL InnoDB 中归档表

php - codeigniter 重复 FOREACH

php - 检查特定机器上的 Gearman Worker 状态

php - 从下拉列表中选择名称后获取所有 mysql 行数据

php - 如何找到图像中的主色?

PhpStorm 和扩展的 php 定义

java - 创建表在 MySql 中有效,但在 JDBC 中无效

codeigniter - 使用cpanel在codeigniter中的cronjob

php - 使用 codeigniter 以表单上传图像时遇到问题