Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, 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
Na pagina de post.php eu busco pelo slug da tabela posts:
$slug = $_GET['slug'];
$stmt = $db->prepare("SELECT * FROM posts WHERE slug=:slug");
$stmt->execute(array(":slug"=>$_GET['slug']));
while($row=$stmt->fetch(PDO::FETCH_BOTH))
{
print utf8_encode($row['titulo']);
}
O código acima pega o slug da url e busca no DB.
Eu gostaria de pelo slug conseguir saber o id_post e retornar da tabela IMAGENS que tem o post_id idêntico para exibir todas imagens
Deu bug não sei como fazer, inner join ainda tenho muita dificuldade para usar
Agradeço ajuda
obrigada @saidmrn mas não entendi o código direito
Este código que postei não funcionará pois um post pode ter várias imagens.
Tente este:
SELECT * from POSTS INNER JOIN IMAGENS where id_post = 1
Mas se ver bem, na pratica na ulr eu acesso:
www.meusite.com.br/titulo_do_post_2
O código php acima vai pegar o trecho titulo_do_post_2 e buscar no DB algo identico.
Até aqui ok, o proximo passo é atraves do slug descobrir qual o id do post e com o id do post ai sim faz sentido fazer um inner join
Olá,tente assim então:
Resultado:
Neste caso,o post 2 só tem 1 imagem.
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/7mPw1bo.png&key=37448d27ee81d6ff625a65773fad782bdbfeeb1170c29f82a585f09da2d36fda" alt="7mPw1bo.png" />
SELECT * from POSTS INNER JOIN IMAGENS where POSTS.slug = $slug and POSTS.id_post = IMAGENS.post_id
Muito obrigada novamente saidmrn
Mas pra mim não esta dando nenhum erro como também não imprime as informações, simplesmente a tela fica em branco:
<p><?php print utf8_encode($row['titulo']); ?></p>
<p><?php print ($row['diretorio_imagem']); ?></p>Como a clausula WHERE está procurando aonde o slug é igual ao titulo,se o link possuir 1 espaço a mais,ja é diferente,então para isso terá que usar o 'LIKE'.
Então veja se o slug que você tá tentando acessar é EXATAMENTE igual ao slug salvo no banco de dados.
Uma outra observação,para mostrar resultados,o post tem que ter pelo menos uma imagem .
quando uso WHERE qualquer pagina fica em branco
Com o LIKE aparece o erro abaixo em todas paginas, pegando com exemplo a pagina meusite.com.br/teste:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIKE posts.slug='teste' AND posts.id_post = i' at line 1' in /post.php:9 Stack trace: #0 /post.php(9): PDOStatement->execute(Array) #1 {main} thrown in /post.php on line 9
Olá,a sintaxe do Like é diferente do Where.
Por exemplo: Select * from posts where titulo like %tes%
Nesse caso,se a palavra TES estiver no titulo,ele retorna.
Porém deixemos isso de lado agora.
Você verificou se o Slug que você tá tentando acessar é EXATAMENTE igual ao do banco de dados ?
O post que você está tentando acessar contém alguma imagem ?
Todos os slugs são identicos ao que contem no DB, justamente pq eles vem do DB (posts dinamicos). Então, pensando bem agora, acredito ser desnecessário o like
Sim na tabela imagens possui imagens
Banco de dados:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/n7Iq3BK.png&key=27cb848ced196172f1ed4afe4f750b02a9fb48853b223aa65b88bff42b86efda" alt="n7Iq3BK.png" />
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/wWoKNw0.png&key=037ca29b1834fb6c70539b9acd87d24c649bc47906ebf6d96fb042933640646a" alt="wWoKNw0.png" />
QUERY:
SELECT * from POSTS INNER JOIN IMAGENS where POSTS.slug = 'titulo_do_post' and POSTS.id_post = IMAGENS.post_id
Resultado:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/PgqQlw9.png&key=e9f479033cbbd95ad6442127e18d196d61f6b53454a29f19526138410d0d5cc5" alt="PgqQlw9.png" />
Tente executar a query dentro do phpmyadmin e veja o que retorna.
Muito obrigada saidmnr, deu certo, o erro era pq eu só tinha um unico id na tabela posts que tinha imagens na tabela imagens.
A sua instrução SQL deu certo, sem o JOIN tbm deu certo:
SELECT * FROM posts, imagens WHERE posts.id_post = imagens.post_id AND slug=:slug