显示两个相关表格中的数据

时间:2017-04-16 13:08:33

标签: php sql

我的数据库中有这个结构:

table certificados - > id PK,标题,描述

表cert_gal - > id PK,id_certificados FK,文件

表证书具有标题和描述,cert_galeria表包含每个证书的映像。 cert_galeria表的字段id_certified为FK。

我想在视图中显示所有证书及其各自的图库,使用连接询问查询,我有重复证书的数据,标题和说明必须是唯一的,并显示相应的图库。

我目前有这个结果:

2 => 
array (size=6)
  'titulo' => string 'teste' (length=5)
  0 => string 'teste' (length=5)
  'descricao' => string 'teste' (length=5)
  1 => string 'teste' (length=5)
  'arquivo' => string 'c45e41a73c02356cc3370caea4e37358.png' (length=36)
  2 => string 'c45e41a73c02356cc3370caea4e37358.png' 

3 => 
array (size=6)
  'titulo' => string 'teste' (length=5)
  0 => string 'teste' (length=5)
  'descricao' => string 'teste' (length=5)
  1 => string 'teste' (length=5)
  'arquivo' => string 'c29ecd046c6d90eb23eebd6d95ab3cff.png' (length=36)
  2 => string 'c29ecd046c6d90eb23eebd6d95ab3cff.png' (length=36)


4 => 
array (size=6)
  'titulo' => string 'teste' (length=5)
  0 => string 'teste' (length=5)
  'descricao' => string 'teste' (length=5)
  1 => string 'teste' (length=5)
  'arquivo' => string '471ed3267f3e342029523269083c3277.png' (length=36)
  2 => string '471ed3267f3e342029523269083c3277.png' (length=36)

我的模特:

public function getCertificados(){

    $sql = "SELECT certificados.titulo, certificados.descricao, cert_galeria.arquivo FROM certificados LEFT JOIN cert_galeria ON certificados.id = cert_galeria.id_certificado";

    $stmt = $this->pdo->prepare($sql);
    $stmt->execute();

    if($stmt->rowCount()>0):
        $dados = $stmt->fetchAll();
    endif;

    return $dados;

    var_dump($dados); die;

}

我的控制员:

class certificadosController extends Controller{

    public function index(){

    $data = array();
    $certificado = new Certificados;

    $dados['certificado'] = $certificado->getCertificados();


    $this->loadTemplate('certificados', $dados);

}

}

如何在不重复来自表格证书的数据(标题,说明)的情况下在我的视图中正确显示?

1 个答案:

答案 0 :(得分:0)

解决了这个问题。

型号:

{"htmlstring" => "Some html string"} //use addslashes if issue creating string.

控制器:

public function getCertificados(){

    $sql="SELECT id_certificado, titulo, descricao FROM certificados";

    $stmt = $this->pdo->prepare($sql);
    $stmt->execute();

    if($stmt->rowCount()>0):
        $dados = $stmt->fetchAll();
    endif;

    return $dados;

}

public function getImagesGal($id){


    $sql = "SELECT cert_galeria.id_certificado, cert_galeria.arquivo FROM cert_galeria right JOIN certificados ON cert_galeria.id_certificado = :id GROUP BY cert_galeria.arquivo";

    $stmt = $this->pdo->prepare($sql);
    $stmt->bindValue(":id", $id);
    $stmt->execute();

    if($stmt->rowCount()>0):
        $dados = $stmt->fetchAll();
    endif;

    return $dados;
}

查看:

class certificadosController extends Controller{

    public function index(){

    $dados = array();
    $certificados = new Certificados();

    $dadosCert = $certificados->getCertificados();

    $lista = null;

    foreach ($dadosCert as $dadosC):

    $lista[$dadosC['titulo']] = ["id_certificado" => $certificados->getImagesGal($dadosC['id_certificado']), 'desc' => $dadosC['descricao']];

    endforeach;

    $dados['certificados'] = $lista;

    $this->loadTemplate('certificados', $dados);

}

}