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 uma tabela, onde fica o id dos post e das tags...
até ai tudo certo. ele recupera o post normal, porém no das tags(que é uma coluna de varchal), ele recupera varias tags, e as separam por virgulas...
ex:
id_post id_tag
1 1,5,4,8
no entanto, ele recupera apenas o primeiro id, neste caso por exemplo, seria o 1...
o que eu posso fazer para ele recuperar todos os ids entre as virgulas ?
uso esta linha para apresentar as tags:
<p id="tag"><b style="font-size:15px;">Tags - </b><?php echo"<a href=\"tag.php?id=" . $post['ID_Tag'] . "\"title=' ".$post['Name_Tag']." '>" .$post['Name_Tag']. "</a>, "; ?> </p>use a função explode do PHP , "ask google": PHP explode (http://php.net/manual/pt_BR/function.explode.php)
Não consegui fazer, rs. Devo ter feito algo errado...
segue o código :
<?php
$idTag = $post['ID_Tags'];
$selectId = explode(',', $idTag);
?>
<p id="tag"><b style="font-size:15px;">Tags - </b><?php echo"<a href=\"tag.php?id=" .$idTag . "\"title=' ".$post['Name_Tag']." '>" .$idTag. "</a>, "; ?> </p>
desta forma, até aparece os ids e tals, com as virgulas junto... porém tudo é um único link, eles não estão separando...>
Não consegui fazer, rs. Devo ter feito algo errado...
segue o código :
<?php
$idTag = $post['ID_Tags'];
$selectId = explode(',', $idTag);
?>
<p id="tag"><b style="font-size:15px;">Tags - </b><?php echo"<a href=\"tag.php?id=" .$idTag . "\"title=' ".$post['Name_Tag']." '>" .$idTag. "</a>, "; ?> </p>
desta forma, até aparece os ids e tals, com as virgulas junto... porém tudo é um único link, eles não estão separando...
Se você quer cada um com seu respectivo link você precisa fazer um loop com os ids. Compreende? Viu o exemplo que te passei para separar os ids das vírgulas? Ai você pode fazer um loop com for ou while.
<?php
$idTag = $post['ID_Tags'];
$selectId = explode(',', $idTag);
for($i=0;$i<count($selectId);$i++){
?>
<p id="tag">
<b style="font-size:15px;">Tags - </b>
<?php
echo"<a href=\"tag.php?id=" .$selectId[$i] . "\"title=' ".$post['Name_Tag']." '>" .$selectId[$i]. "</a>, "; ?> </p>
<?php
}
?>Perfeito...
agora estou com problemas, para mudar do id, para o nome... esta apenas recuperando o nome da primeira tag, alguém sabe como resolver isto ?
o problema é a modelagem.
há solução para resolver sob a estrutura corrente... mas se puder, remodele a estrutura dos dados pois isso dessa forma pode lhe trazer complicações futuras
>
o problema é a modelagem.
há solução para resolver sob a estrutura corrente... mas se puder, remodele a estrutura dos dados pois isso dessa forma pode lhe trazer complicações futuras
e o que você me aconselha a fazer ?
atualmente tenho uma tabela para os posts, outra para as tags, e uma que apenas informo o id dos mesmos....
uma tabela para as tags..
mas eu já tenho.
apenas recupero o id dessas tags, e mando pra outra tabela, onde vai ficar o id do post e das tags...
Crie uma referencia entre as duas tabelas (Post e Tags), armazenando somente o id de cada!
Exemplo:
Post_has_Tag -> Nome tabela
Post_idPost INT -> Nome campo
Tag_idTag INT -> Nome Campo
Evite esta gambiarra de 1,5,4,8
Tambem concorco com o WDuarte e com o Hinom, trabalha desta forma pode trazer serios problemas.
Este link pode lhe ajudar: Normalização de dados
>
Tambem concorco com o WDuarte e com o Hinom, trabalha desta forma pode trazer serios problemas.
Este link pode lhe ajudar: Normalização de dados
Eu fiz exatamente desta forma antes, porém tive problemas para apresentar os posts corretamente, com suas devidas tags...
Mais qual problema você teve fazendo desta forma.
ok, vamos lá, fiz exatamente como antes...
armazenar os ids e tals, já esta funcionando, exatamente como vocês me indicaram...
o problema, creio eu, esta no select...
segue o código :
$query = mysql_query("SELECT * FROM posts T INNER JOIN categories TC ON T.Category_ID = TC.ID_Cat
LEFT JOIN post_tags ON T.ID = post_tags.ID_Post
LEFT JOIN tags ON tags.ID_Tag = post_tags.ID_Tags
GROUP BY T.Title ORDER BY T.ID DESC LIMIT $inicial, $numreg") or die(mysql_error());
como vocês podem ver, o id da tabela post, esta igual ao id da tabela, onde recebe o id dos posts e das tags(post_tags), por isso coloquei o GROUP BY T.Title, para listar os posts pelos títulos.... caso contrario, eles iriam se repetir, assim como esta na tabela post_tags. O problema, é que mostra apenas a primeira tag...
ex :
tabela post_tags:
id_post id_tag
1 2
1 5
1 9
sem GROUP BY T.Title :
apresentação dos post
titulo post1
tag: 2
titulo post1
tag:5
titulo post1
tag:9
com GROUP BY T.Title:
titulo post1
tag:2
este é o problema, ele apresenta apenas a primeira tag...