Ir para conteúdo
Fórum Script Brasil
  • 0

[Resolvido]Dúvida Sobre: Criação de Categoria em Banco MYSQL


jefponte

Pergunta

Criei um site. Nele eu uso MYSQL para mostrar artigos, notícias ou eventos nas três categorias distintas. Veja no site: http://augustojr10.com.br/noticias.php

O meu problema é que quando eu adiciono um artigo com mais de uma categoria, ele abre uma nova categoria. Por exemplo: Uma nova categoria "evento,notícia". Eu queria saber como é que esses blogs fazem pra criar várias categorias distintas em uma mesma postagem. No meu caso eu só posso adicionar uma categoria, no campo da tabela referente a tabela "novapostagem".

Quem precisar ver, está ai as partes importantes do codigo:

Noticias.php

<?php

$categ = $_GET['categoria'];

if (!isset($categ) || $categ==" )

{

$string ="";

$msg="";

}

else

{

$string="AND categoria= '". $categ. "'";

$msg= $categ;

}

?>

<?php

$titulo = $_GET['titulo];

if (!isset($titulo) || $titulo=="" )

{

$filtrotitulo ="";

$msg2="";

}

else

{

$filtrotitulo="AND titulo= '". $titulo. "'";

$msg2= $categ;

}

?>

<div class="geral" >

<div class="corpo" id='centru' >

<?php

$conexao = mysql_connect("localhost","oreidosl_root","cocacola@12");

$banco = mysql_select_db("oreidosl_augustojr10", $conexao);

$query = mysql_query("SELECT * FROM novapostagem WHERE usuario_id='1' $string $filtrotitulo ORDER BY id desc");

while($mostrar = mysql_fetch_array($query))

{

echo "<div class='post'>";

echo "<h3>" .'<a href="http://www.augustojr10.com.br/noticias.php?titulo='.$mostrar['titulo'].'"> '.$mostrar['titulo'].'</a>' ."<br>". "</h3>";

echo "<small>". $mostrar['data'] . '<br>' . "Postado por: " . $mostrar['autordotexto']. ' em'. '<a href=http://www.augustojr10.com.br/noticias.php?categoria='.$mostrar['categoria].'"> '.$mostrar['categoria'].'</a>' . '</small>'.'<br>' ;

echo $mostrar['corpodamensagem'] . "<br>";

echo "</div>";

}

mysql_close($conexao);

?>

Estrutura da tabela "novapostagem"

1 id int(200) Não None AUTO_INCREMENT Alterar Eliminar Mais

2 data timestamp Não CURRENT_TIMESTAMP Alterar Eliminar Mais

3 autordotexto text latin1_swedish_ci Não None Alterar Eliminar Mais

4 titulo text latin1_swedish_ci Não None Alterar Eliminar Mais

5 corpodamensagem text latin1_swedish_ci Não None Alterar Eliminar Mais

6 categoria text latin1_swedish_ci Não None Alterar Eliminar Mais

7 usuario_id int(200) Não 1 Alterar Eliminar Mais

Essa categoria aí recebe os valores que usa como categoria. Cada postagem só ta aceitando uma categoria. Eu queria saber como faço pra ter mais de uma categoria. Será que eu preciso criar outro campo "categoriaII"? Complica, porque se eu precisasse de uma postagem com 5 categorias ao mesmo tempo, seriam 6 campos a mais...

Eu quero saber como esses blogs fazem.

Um exemplo é esse blog aqui

http://blog.thiagobelem.net/criando-um-tem...dpress-parte-4/

Veja que o artigo desse link tem seis categorias distintas. Me ajudem com isso, por favor.

Agradeço a atenção de quem leu.

Editado por jefponte
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
Ninguém sabe?

Boa tarde,

Nesse seu caso, eu usaria uma tabela extra para guardar as categorias de cada artigo.

ex:

'tb_relacionamento'

id - chave primaria

id_cod_postagem - é o id do seu artigo/evento/noticia

nome_categoria - guardaria o nome da categoria (artigo/evento/noticia)

Nessa forma, cada nova postagem poderia ser relacionada a infinitas categorias (no seu caso: artigo/evento/noticia)

Ao mostrar a postagem, bastaria fazer a consulta relacionando os id's da tabela

tipo:

Mostrar todas as noticias:

select distinct t.titulo_postagem, t.data_postagem, (os campos aqui) from tb_postagens t, tb_relacionamento r where t.id_postagem=r.id_cod_postagem and r.nome_categoria='noticias' order by t.data_postagem desc

É claro que nesse exemplo está simplificado para 3 categorias apenas. Dependendo da aplicação, se tivesse tb infinitas categorias, criar uma tabela de categorias e relacionar tambem o id dessas categorias na 'tb_relacionamento'

Dê seu feedback!

Link para o comentário
Compartilhar em outros sites

  • 0
Ninguém sabe?

Boa tarde,

Nesse seu caso, eu usaria uma tabela extra para guardar as categorias de cada artigo.

ex:

'tb_relacionamento'

id - chave primaria

id_cod_postagem - é o id do seu artigo/evento/noticia

nome_categoria - guardaria o nome da categoria (artigo/evento/noticia)

Nessa forma, cada nova postagem poderia ser relacionada a infinitas categorias (no seu caso: artigo/evento/noticia)

Ao mostrar a postagem, bastaria fazer a consulta relacionando os id's da tabela

tipo:

Mostrar todas as noticias:

select distinct t.titulo_postagem, t.data_postagem, (os campos aqui) from tb_postagens t, tb_relacionamento r where t.id_postagem=r.id_cod_postagem and r.nome_categoria='noticias' order by t.data_postagem desc

É claro que nesse exemplo está simplificado para 3 categorias apenas. Dependendo da aplicação, se tivesse tb infinitas categorias, criar uma tabela de categorias e relacionar tambem o id dessas categorias na 'tb_relacionamento'

Dê seu feedback!

Eu tentei pegar o que você me disse e fazer o relacionamento de algum jeito. Mas ainda estou entrando em um beco sem saída. Vou dizer aonde cheguei.

Agora são três tabelas, listando-as:

tb postagem

campos:

id, titulo, corpo, autor_id

tb categorias

campos:

id, categoria

tb relacionamento

id, Postagem_id, categoria_id

Então, dessa forma posso relacionar as tabelas e fazer de um jeito que eu relaciono uma postagem com várias categorias, através do Id da postagem sendo relacionada várias vezes com o id da categoria.

Parece que vai dar certo fazer isso. Através de um select para a postagem, depois um selecte para as categorias com filtro para categoria onde o seu id tem correspondente ao id da postagem na tabela relacionamento. Acho que posso fazer isso, ainda estou pensando nisso.

Mas um problema se faz presente. Como vai ser na hora de inserir as postagens? Como inserir junto com as postagens as sus categorias na tabela relacionamento? Vai ser mais complicado do que o que parece. Preciso de ajuda, alguém aqui já conseguiu fazer isso?

Link para o comentário
Compartilhar em outros sites

  • 0

O que complica é o seguinte. Na hora de adicionar os dados eu precisarei do id da postagem para que a categoria seja adicionada com o id da postagem na tabela relacionamento. Mas eu não tenho como saber o id da postagem durante a inserção desta. Ele é uma chave primária adicionada na hora e automaticamente. Tem que ter um jeito eficiente de fazer isso, por favor, Sandro, me ajude.

Link para o comentário
Compartilhar em outros sites

  • 0
O que complica é o seguinte. Na hora de adicionar os dados eu precisarei do id da postagem para que a categoria seja adicionada com o id da postagem na tabela relacionamento. Mas eu não tenho como saber o id da postagem durante a inserção desta. Ele é uma chave primária adicionada na hora e automaticamente. Tem que ter um jeito eficiente de fazer isso, por favor, Sandro, me ajude.

Use LAST_INSRERT_ID.

exemplo:

START TRANSACTION;

INSERT INTO tb_postagem(titulo, corpo, autor_id)
VALUES('afafafafa', 'gagagagag', 1);

SET @idpostagem = (select LAST_INSERT_ID());

INSERT INTO categorias(categoria)
VALUES('xxxx');

INSERT INTO tb_relacionamento(Postagem_id, categoria_id)
VALUES(@idpostagem, LAST_INSERT_ID());

Link para o comentário
Compartilhar em outros sites

  • 0
Pode me explicar o que é que significa essa linha do SET? O que é esse SET?

SET @idpostagem = (select LAST_INSERT_ID());

Se você ler o manual verá que o comando SET é usado para atribuir um valor a uma variável ou a um campo.

Ainda lendo o manual, a instrução (select LAST_INSERT_ID()) retorna o ultimo elemento (autoincrementado) inserido pela instrução imediatamente anterior dentro da mesma transação.

Link para o comentário
Compartilhar em outros sites

  • 0
Agora que eu estou me tocando. Esse @idpostagem é uma variável? Porque não escreveu $idpostagem? Também pode fazer usando "@" no lugar de "$"?

Escrevi assim porque esta é a área de Banco de Dados de MySQL e não a área de PHP ou qualquer outra linguagem.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, hoje coloquei em prática o que tentei resolver aqui. Agradeço muito a sua ajuda Denis, entretanto não consegui fazer do seu jeito.

O primeiro código,

insert.php

$sql="INSERT INTO parede (usuariologin, titulo, data, hora, corpo, usuario_id)
VALUES
('$_SESSION[Usuariologin]','$_POST[titulo]', '$datadehoje', '$hora' ,'$_POST[corpo]', '$_SESSION[UsuarioID]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }


SET @idpostagem = (select LAST_INSERT_ID());
    
  
  $sql2="INSERT INTO relacparedecat(categoria_id, parede_id)
  VALUES
  ('$_POST['categoriaid']', @idpostagem)";
  
  if (!mysql_query($sql2,$con))
  {
      die('Error: ' . mysql_error());
  }
---- exibiu o erro Parse error: syntax error, unexpected '@' in D:\web\gcsufc\bd\insertnaparede.php on line 53 Tentei mexer, coloquei aspas em algum ou outro lugar, mas não resolveu. Eu resolvi fazendo um select pegando o ultimo id. Dessa forma:
$sql="INSERT INTO parede (usuariologin, titulo, data, hora, corpo, usuario_id)
VALUES
('$_SESSION[Usuariologin]','$_POST[titulo]', '$datadehoje', '$hora' ,'$_POST[corpo]', '$_SESSION[UsuarioID]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }

  
  $selectultimoid= "SELECT id FROM parede ORDER BY id DESC LIMIT 1";
  $res = mysql_query($selectultimoid);
  while($fila = mysql_fetch_array($res))
  
  {
  
      $idpostagem=$fila['id'];
  
  }
  
  
  $sql2="INSERT INTO relacparedecat(categoria_id, parede_id)
  VALUES
  ('$_POST[categoriaid]', '$idpostagem')";
  
  if (!mysql_query($sql2,$con))
  {
      die('Error: ' . mysql_error());
  }

Acho que não consegui do seu jeito porque eu uso um arquivo .php, acho que desse jeito aí é usando um arquivo .sql, sei lá se é isso.

Bem, o problema foi resolvido. No meu site funciona um sistema de postagens com possibilidade de criação de várias categorias.

Estará online desse jeito aí na próxima semana em gcsufc.com.br

Denis, se você quiser me dizer porque não funcionou do seu jeito eu agradeceria. Desde já agradeço pela paciência e atenção.

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, hoje coloquei em prática o que tentei resolver aqui. Agradeço muito a sua ajuda Denis, entretanto não consegui fazer do seu jeito.

...

Denis, se você quiser me dizer porque não funcionou do seu jeito eu agradeceria. Desde já agradeço pela paciência e atenção.

Oi jefponte,

A sintaxe que escrevi é a usada dentro do Mysql para escrever códigos (triggers, storage procedures, functions).

Cada linguagem usa uma sintaxe diferente.

Você usa PHP e é comum, mas não é correto (pois existe uma área própria para PHP), voces postarem nesta área codigos em PHP.

Parabéns por ter conseguido corrigir seu código.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...