Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Eu tenho as duas tabelas abaixo
tabela IMAGENS
id_imagens | diretorio_imagem | post_id
1 imagem1.jpg 1
2 imagem2.jpg 1
3 imagem3.jpg 1
4 imagem4.jpg 1
5 imagem5.jpg 2
6 imagem6.jpg 2
7 imagem7.jpg 2
8 imagem8.jpg 2
Tabela POSTS
id_post | slug | titulo
1 titulo_do_post Titulo do Post
2 titulo_do_post_2 Titulo do Post 2
PHP:
$slug = $_GET['slug'];
$stmt = $db->prepare("SELECT * FROM posts, imagens
WHERE posts.id_post = imagens.post_id
AND slug=:slug");
$stmt->execute(array(":slug"=>$_GET['slug']));
while($row=$stmt->fetch(PDO::FETCH_BOTH))
{
?>
<h1><?php print utf8_encode($row['titulo']);?></h1>
<img src="<?php print ($row['diretorio_imagem']); ?>">
<?php
}
?>
Acessando a página "Titulo do post 2" imprime:
Titulo do post 2
imagem5.jpg
Titulo do post 2
imagem6.jpg
Titulo do post 2
imagem7.jpg
Titulo do post 2
imagem8.jpg
Como ter o resultado:
Titulo do post 2
imagem5.jpg
imagem6.jpg
imagem7.jpg
imagem8.jpg
Agradeço ajuda
Obrigada @ESerra mas dentro do while tem outras tags html por exemplo propaganda ela também estão sendo replicadas conforme a quantidade de imagens que estão relacionadas ao post
$slug = $_GET['slug'];
$stmt = $db->prepare("SELECT * FROM posts, imagens
WHERE posts.id_post = imagens.post_id
AND slug=:slug");
$stmt->execute(array(":slug"=>$_GET['slug']));
while($row=$stmt->fetch(PDO::FETCH_BOTH))
{
if(!isset($nao_sei_pq_perco_tempo_tentando_explicar)){
$nao_sei_pq_perco_tempo_tentando_explicar = 'ok';
?>
<h1><?php print utf8_encode($row['titulo']);?></h1>
<?php
}
<img src="<?php print ($row['diretorio_imagem']); ?>">
<?php
}
?>Nada mal para um moderador impaciente rsrs
Obrigada @ESerra vou tentar
O resultado foi o que eu previa e comentei no post anterior, para o titulo funciona, para as demais tags html que estiverem dentro do while todas estão sendo repetidas. Provavelmente tem alternativa para não ser necessario criar varios issets.
Como faço para na instrução SQL inserir o group by para as imagens? E fazer o foreach das imagens do group by dentro do while?
"SELECT * FROM posts, imagens
WHERE posts.id_post = imagens.post_id
AND slug=:slug"Se você agrupar, terá que agrupar pela post_id, neste caso vai retornar apenas 1 imagem. Dai sobram duas alternativas, usar os ifs ou fazer a query das imagens separada dos dados do post.
Você pode criar uma variável para cada tag que queira exibir apenas uma vez, e mandar exibir as variáveis, ao invés de exibir diretamente dentro do loop
A saída foi usar GROUP_CONCAT, SEPARATOR '|', JOIN, GROUP BY e do php o explode '|'.
Básico de lógica, faça uma verificação com um if se uma determinada variável existe, essa variável deverá ser criada dentro do if, como você só quer imprimir uma vez, na primeira volta a variável não existirá, entrará no if e então será impresso título apenas uma vez.