Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

userFeliz

Mostrar titulo da categoria para cada post

Recommended Posts

Olá.

 

Estou fazendo um Cms, e estou com problema para mostrar o nome da categoria para determinado post...

 

Eu tenho duas tabelas... uma para os posts, e outras para as categorias, na tabela posts, tem uma coluna chamada " Category_ID ", que recebe o id da categoria, para determinado post, até ai normal, porém, eu só tenho o id da categoria... desta forma, só vai apresentar o id da categoria, e não o titulo...

 

vou dar um exemplo :

 

Nome : post 1

Autor : autor post 1

Categoria : id 1

 

 

Nome : post 2

Autor : autor post 2

Categoria : id 1

 

 

Ou seja, eu teria que recuperar o titulo da categoria, para o ID.

 

Alguém sabe como proceder ?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está atualmente sua query? O que você já tentou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na query faz algo parecido com isso:

SELECT categoria.nome as nome_categoria FROM post INNER JOIN categoria ON post.Category_ID = categoria.id WHERE {...}

invês de ele retornar o id da categoria, ele retorna o nome na variavel nome_categoria.

 

Abç

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está atualmente sua query? O que você já tentou?

	$query = mysql_query("SELECT * FROM posts ORDER BY ID DESC LIMIT $inicial, $numreg") or die(mysql_error());
	$sql_conta = mysql_query("SELECT * FROM posts") or die(mysql_error()); // código para paginação
	$quantreg = mysql_num_rows($sql_conta); // Quantidade de registros pra paginação
	
	while($post = mysql_fetch_assoc($query)) {
		echo "<div id='conteudo'><div id='titulo'><h2 id='title'>" 
			."<a href=\"posts.php?id="  . $post['ID'] . "\"title=' ".$post['Title']." '>" .mb_substr($post['Title'], 0, 50).  "</a>". 
			"</h2></div>".
			"<div id='content'>" ./*wordwrap(*/$post['Content']/*, 80,'<br />', true)*/. "</div> <div id='dados'>".
			"<hr /><span id='por'> Por -". "</span>"  .  "<h3 id='author'>" 
			.mb_substr($post['Author'], 0, 9). " </h3>" ."<span id='em'> em </span>" . "<h5 id='data'>" .$post['Data'] . "</h5>"
			."  <span id='categoria'><a href=\"categoria.php?id=" . $post['Category_ID'] . "\">" .$post['Category_ID']. 
			"</a></span> ".
			"</div></div> <br />";	
	}

 

ta ai

 

 

-----------

 

 

 

Na query faz algo parecido com isso:

SELECT categoria.nome as nome_categoria FROM post INNER JOIN categoria ON post.Category_ID = categoria.id WHERE {...}

invês de ele retornar o id da categoria, ele retorna o nome na variavel nome_categoria.

 

Abç

não entendi muito bem cara, não podia explicar melhor ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que mandar um JOIN na query, só assim você vai conseguir ligar as duas tabelas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize a consulta com INNER JOIN.

 

 

 

mysql_query("SELECT * FROM tabela1 T INNER JOIN tabelaCategoria TC ON T.id_categoria_da_tabela1 = TC.id_da_tabela_categoria")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficou assim :

 

$query = mysql_query("SELECT * FROM posts T INNER JOIN categories TC ON T.Category_ID = TC.ID
	ORDER BY Data DESC LIMIT $inicial, $numreg") or die(mysql_error());

 

agora como que eu faço para dar um echo nos títulos das categorias ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só colocar o nome dos campos referente a tabela 2.

 

 

 

while($post = mysql_fetch_assoc($query)) {




print $post['nome_do_campo_titulo_tabela2'];


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou... Porém quando estou a aplicar a mesma lógica para a pagina de categorias, e do post em si, ele me retorna o seguinte erro :

 

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\Site final\posts.php on line 82

 

código da pagina de categoria :

 

							$id = $_GET['id'];


						$query = mysql_query("SELECT * FROM posts T INNER JOIN categories TC ON T.Category_ID = TC.ID WHERE Category_ID = '$id' ORDER BY ID DESC LIMIT $inicial, $numreg "); 
						
						$sql_conta = mysql_query("SELECT * FROM posts WHERE Category_ID = '$id'") or die(mysql_error()); // paginação
						$quantreg = mysql_num_rows($sql_conta); // Quantidade de registros pra paginação
				
						while($post = mysql_fetch_assoc($query)) {
							echo "<a href=\"categoria.php?id=" . $post['Category_ID'] . "\">" .$post['Title_Cat']. 
							"</a>;	
						}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou... Porém quando estou a aplicar a mesma lógica para a pagina de categorias, e do post em si, ele me retorna o seguinte erro :

 

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\Site final\posts.php on line 82

 

código da pagina de categoria :

 

 
			$id = $_GET['id'];


$query = mysql_query("SELECT * FROM posts  WHERE Category_ID = '$id'T INNER JOIN categories TC ON T.Category_ID = TC.ID ORDER BY ID DESC LIMIT $inicial, $numreg "); 


				
			while($post = mysql_fetch_assoc($query)) {
			 echo "<a href=\"categoria.php?id=" . $post['Category_ID'] . "\">" .$post['Title_Cat']. 
							"</a>;	
						}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixe assim:

 

 

 

 

$id = isset($_GET['id']) ? (int)$_GET['id'] : false;


$query = mysql_query("SELECT * FROM posts P INNER JOIN categories T ON P.Category_ID = T.ID WHERE P.Category_ID = '$id' ORDER BY T.ID DESC LIMIT $inicial, $numreg ");

$sql_conta = mysql_query("SELECT * FROM posts WHERE Category_ID = '$id'") or die(mysql_error()); // paginação
$quantreg = mysql_num_rows($sql_conta); // Quantidade de registros pra paginação

while($posts = mysql_fetch_array($query)) {
echo "<a href=\"categoria.php?id=" . $posts['Category_ID'] . "\">" .$posts['Title_Cat'].
"</a>;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito... porém peguei o mesmo código para a parte dos posts, mas não deu certo

 

						$id = isset($_GET['id']) ? (int) $_GET['id'] : false;
							$query = mysql_query("SELECT * FROM posts P INNER JOIN categories T ON P.Category_ID = T.ID 
						WHERE P.ID = '$id' "); 

 

Percebe que só mudei de Category_ID, por ID, porém não apresenta nada na tela, nem mesmo erros..

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta me retornando o id da categoria... porém teria que retornar o ID da tabela posts

 

Então ?! mãos a obra meu filho. o seu LINK que está pegando o ID incorreto para repassar para a página que processa os dados de acordo aquele ID. seu problema não é a query é o ID passado pelo link, corrija, e preste atenção no que está fazendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui, acho que não tava funcionando por que o nome das colunas e ambas tabelas eram iguais, apenas mudei de uma tabela, e funcionou, rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não deu certo =\, pois mudando o nome da coluna, vai me dar um trabalho muito maior...

 

então, deixei os mesmo nomes, ou seja :

 

coluna posts : ID

coluna categories : ID

 

o problema é que mesmo eu colocando WHERE P.ID = '$id', ele me retorna o id da tabela categoria..., sendo que a minha query esta assim :

 

$id = isset($_GET['id']) ? (int)$_GET['id'] : false;
$query = mysql_query("SELECT * FROM posts P   INNER JOIN categories T ON P.Category_ID = T.ID WHERE P.ID = '$id'"); 

como vocês podem ver, o P, seria da tabela posts

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz, se você não passar o ID correto, ele não vai puxar os dados.

 

Caro amigo, aprenda a criar suas tabelas e campos com "prefixos", o nome da tabela de acordo com o banco, e nome dos campos de acordo com o nome da tabela.

 

Agora você vai ter o maior rebú se quiser mudar o nome de um campo desses, dará erro em toda a sua aplicação, por isso quando se tratar de campo ID, sempre nas exibições deste, utilize sempre o array 0.

 

print $var[0];

Deste modo, ainda que altere o campo ID, sua aplicação não sofrerá, a menos que mude o campo de lugar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passei perrengue mais consegui, rs

 

é verdade, quando criei as tabela nem manjava disso, agora terei mais cuidado em nomear as colunas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passei perrengue mais consegui, rs

 

é verdade, quando criei as tabela nem manjava disso, agora terei mais cuidado em nomear as colunas...

 

Exatamente... a nomenclatura das colunas é essencial para um bom projeto, pois evita conflitos em querys, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.