Повторный результат SQL в JOIN — Codeigniter

#php #mysql #sql #codeigniter

#php #mysql #sql #codeigniter

Вопрос:

Я пытаюсь вернуть список «клиник» с вашими «telefones_clinicas» и «planos_clinicas». У меня могло бы быть более одного «telefones_clinicas» и «planos_clinicas», но это не обязательно.

Но если у меня есть более одного «telefones_clincias» или «planos_clinicas», мой результат sql возвращается дублированным. Как я могу это решить?

Вот мои таблицы:

Таблица: clinicas — Clomuns: идентификатор, аутентичная почта, аутентичная почта, идентификатор cli_pag_id, описание, фотография, номер, qr-код, сайт, ativo, создан, изменен

Таблица: telefones_clinicas — Clomuns: идентификатор, tdc_dli_id, телефон, создан, изменен

Таблица: planos — Clomuns: id, plano

Таблица: planos_clinicas — Clomuns: clinicas_id, planos_id

У меня есть больше таблиц в этой базе данных, но я не думаю, что это проблема.

По этой ссылке вы можете увидеть дублированные возвраты: http://oakz.org/clinicas/clinicas/teste

У меня есть только две «клиники». «Клиники» с идентификатором 27 имеют два «телефона» и четыре «плано». «Клиники» с идентификатором 28 имеют один «телефон» и два «planos».

Я думаю, они повторяют каждый результат 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'); 
  

Комментарии:

1. Повторяется только ‘plano’ ‘Amil’ ([plano] => Amil).