userFeliz 1 Denunciar post Postado Abril 15, 2013 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
ESerra 744 Denunciar post Postado Abril 15, 2013 Como está atualmente sua query? O que você já tentou? Compartilhar este post Link para o post Compartilhar em outros sites
Gui0 2 Denunciar post Postado Abril 15, 2013 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
userFeliz 1 Denunciar post Postado Abril 15, 2013 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
ESerra 744 Denunciar post Postado Abril 15, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Abril 15, 2013 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
userFeliz 1 Denunciar post Postado Abril 15, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Abril 15, 2013 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
userFeliz 1 Denunciar post Postado Abril 15, 2013 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
userFeliz 1 Denunciar post Postado Abril 16, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Abril 16, 2013 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
userFeliz 1 Denunciar post Postado Abril 16, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Abril 16, 2013 da um print no $id e veja o que ta retornando. Compartilhar este post Link para o post Compartilhar em outros sites
userFeliz 1 Denunciar post Postado Abril 16, 2013 ta me retornando o id da categoria... porém teria que retornar o ID da tabela posts Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Abril 16, 2013 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
userFeliz 1 Denunciar post Postado Abril 16, 2013 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
userFeliz 1 Denunciar post Postado Abril 16, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Abril 16, 2013 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
userFeliz 1 Denunciar post Postado Abril 17, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Abril 17, 2013 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