重复的 SQL 导致 JOIN - Codeigniter

Posted

技术标签:

【中文标题】重复的 SQL 导致 JOIN - Codeigniter【英文标题】:Repeated SQL result in JOIN - Codeigniter 【发布时间】:2017-02-18 06:11:15 【问题描述】:

我正在尝试使用您的“telefones_clinicas”和“planos_clinicas”返回“clinicas”列表。我可以拥有多个 'telefones_clinicas' 和 'planos_clinicas',但这不是必需的。

但如果我有多个 'telefones_clincias' 或 'planos_clinicas' 我的 sql 结果返回重复。我该如何解决这个问题?

这是我的桌子:

表格: 临床 - Clomuns: id、autenticacao_email、autenticacao_id、cli_pag_id、descricao、foto、nome、qrcode、site、ativo、created、modified

表: telefones_clinicas - Clomuns: id、tdc_dli_id、电话、创建、修改

桌子: 平面图 - 克洛蒙: id,plano

表格: planos_clinicas - 克洛蒙: Clinicas_id、planos_id

我在这个数据库中有更多的表,但我认为它们不是问题。

在此链接中,您可以看到重复的返回:http://oakz.org/clinicas/clinicas/teste

我只有两个“诊所”。 id 27 的'clinicas' 有两个'telefones' 和四个'planos'。 id 28 的“诊所”有一个“电话”和两个“平面”。

我认为他们将 planos 的每个结果重复了两次。

public function teste()


    $this->db->trans_start();

    $this->db->select('clinicas.id AS id_clinica, nome, site, especialidade, descricao, foto, ativo, clinicas.created AS criacao_clinica, qrcode, cep, logradouro, complemento, numero, bairro, cidade, uf, telefone, planos.plano AS plano');
    $this->db->from('clinicas');
    $this->db->join('endereco_clinica', 'clinicas.id = endereco_clinica.ecs_cli_id');
    $this->db->join('Especialidades_clinicas', 'clinicas.id = Especialidades_clinicas.edc_cli_id');
    $this->db->join('especialidades', 'Especialidades_clinicas.edc_esp_id = especialidades.id');
    $this->db->join('planos_clinicas', 'clinicas.id = planos_clinicas.clinicas_id');
    $this->db->join('telefones_clinicas', 'clinicas.id = telefones_clinicas.tdc_cli_id');
    $this->db->join('planos', 'planos.id = planos_clinicas.planos_id');
    $this->db->order_by('id_clinica', 'ASC');
    $clinicas = $this->db->get();


            $xyz = 0;

            foreach($clinicas->result() as $row)
                $id_clinica = $row->id_clinica;
                $nome = $row->nome;
                $site = $row->site;
                $especialidade =$row->especialidade;
                $descricao = $row->descricao;
                $foto = $row->foto;
                $ativo = $row->ativo;
                $criacao_clinica = $row->criacao_clinica;
                $qrcode = $row->qrcode;
                $cep = $row->cep;
                $logradouro = $row->logradouro;
                $complemento = $row->complemento;
                $numero = $row->numero;
                $bairro = $row->bairro;
                $cidade = $row->cidade;
                $uf = $row->uf;
                $telefone = $row->telefone;
                $plano = $row->plano;
                $xyz++;
                echo 'tô na rodada '.$xyz;
                for($i = 0; $i <= count($plano); $i++) 
                    echo '<pre>',print_r($plano,1),'</pre>';
                    echo '----------------------------------------<br>';
                    echo '<pre>',print_r($row,1),'</pre>';
                    echo '----------------------------------------<br>';
                
            


    $this->db->trans_complete();


【问题讨论】:

【参考方案1】:

您可以尝试使用 GROUP BY

 $this->db->group_by('clinicas.id'); 

【讨论】:

试过了,返回只有 'plano' 'Amil' ([plano] => Amil) 重复

以上是关于重复的 SQL 导致 JOIN - Codeigniter的主要内容,如果未能解决你的问题,请参考以下文章

SQL left join 数据重复

SQL Left Join 仅第一个匹配项

sql JOIN 导致双行

SQL Select - Union 结合 Join 查询导致错误

使用 sqlcontext spark 执行 sql join [重复]

Join导致冗余数据引起慢SQL