Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera, to com uma dúvida que creio que não seja tão difícil.
É o segunite, eu estou fazendo um site que seja single page, e no mesmo tera uma listagem de fotos (é de um ilustrador).
Então seria assim mais ou menos.
Livro(categoria)
- Livro1(subcategoria)
- fotos(lista de fotos do livro)
- Livro2(subcategoria)
- fotos2(lista de fotos do livro)
------------------------
Desenho(categoria)
- 2d(subcategoria)
- fotos(lista de fotos do desenho)
- 3d(subcategoria)
- fotos(lista de fotos do desenho)
Vamos supor que isso seja uma página unica onde sera listado dessa forma.
Eu tenho 3 tabelas, Categoria, Subcategoria, Imagem
Eu gostaria de listar exatamente dessa forma, eu até consegui fazer no php porem tive que fazer um monte de loop e requisição, mas gostaria de saber se no SQL eu ja não consiga filtrar isso?
Ou até mesmo em php se alguem souber uma pratica melhor para retornar dessa forma.
OBS: Eu sei que tem que user JOIN para relacionar as tabelas, e é exatamente o que fiz, porem não consegui o resultado por que ele repete os valores, exemplo se tiver 2 subcategorias em uma categoria, ele vai imprimir 2x o nome da categoria FUUUUU, ou se tiver 10 fotos dentro de uma subcategoria, ele imprime 10x o nome da subcategoria.
Alguem sabe onde pode estar a solução?
Segue a forma que eu consegui fazer com PHP e deu certo. Porem estou violando o relacionamento de tabelas (que seria o certo fazer com join) ou estou errado? Bom segue minha gambiarra, que deu certo, porem considero uma péssima prática o que fiz.
<?php
$categoria = $bd->prepare("
SELECT categoria_nome, categoria_id
FROM categoria
");
$categoria->execute();
$categoria = $categoria->fetchAll(PDO::FETCH_OBJ);
$sql_sub = "
SELECT subcategoria_nome, subcategoria_id
FROM subcategoria
WHERE categoria_id = ?
";
$sql_img = "
SELECT *
FROM imagem
WHERE categoria_id = ? && subcategoria_id = ?
";
$subcategoria = $bd->prepare($sql_sub);
$imagem = $bd->prepare($sql_img);
foreach($categoria as $cat) {
echo "<h1>$cat->categoria_nome</h1>";
$subcategoria->execute(array($cat->categoria_id));
$sub = $subcategoria->fetchAll(PDO::FETCH_OBJ);
foreach ($sub as $s) {
echo "<h2>$s->subcategoria_nome</h2>";
$imagem->execute(array($cat->categoria_id, $s->subcategoria_id));
$img = $imagem->fetchAll(PDO::FETCH_OBJ);
foreach($img as $i) {
echo $i->imagem_nome . "<br>";
}
}
}
?>Carregando comentários...