Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

13-04-2010 15:03

Galera é o seguinte, gostaria de colocar no final das noticias algumas noticias relacionadas de acordo com as tags cadastradas.

No código abaixo eu seleciono as tags

<?php echo"<hr /><strong>Tags:</strong> "; $a = mysql_query("select cp_tags from tb_topicos where ID=$id"); while($seleciona_tags = mysql_fetch_array($a)){ extract($seleciona_tags); $palavras = explode(",", $cp_tags); foreach ($palavras as &$tags) { $tags = trim($tags); echo "&nbsp;<a href=\"view_tags&cp_tags=$tags\">$tags</a>&nbsp;"; } echo"<hr />"; } ?>

Aqui eu faço a busca de acordo com as tags, mas pelo que tenho visto, só pega os resultados da ultima tag do laço.

Tem uma forma de pegar todas ou sei lah uma maneira certa de se fazer isto.

<?php $n = $_GET['ID']; echo"<div class=\"esq\"><img class=\"img\" src=\"imgs/site/links_relacionados.jpg\" alt=\"\" /></div> <div class=\"dir\"> <ul>"; $rel = mysql_query("select * from tb_topicos where cp_tags like '%$tags%' AND ID!='$n' order by cp_data desc limit 4"); $nr_linhas = mysql_num_rows($rel); for($i=0;$i<$nr_linhas;$i++){ $campo = mysql_fetch_assoc($rel); $idd = $campo['ID']; $tit = $campo['cp_titulo']; $cp_tipo = $campo['cp_tipo']; include 'links_page.php'; echo" <li style=\"list-style-type:disc; color: #f90;\"><a href=\"$link/$idd\">$tit</a></li> "; } echo"</ul></div>"; ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

13-04-2010 18:00

Como ficam dispostas essas tags da notícia que via ser referência?

Provavelmente você vai poder usar array como base para fazer sua consulta MySQL, dá uma olhada no link abaixo

http://www.codigosnaweb.com/forum/Consu ... _3403.html
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

14-04-2010 08:31

Vou dar um exemplo.

Funciona da seguinte forma. Ex.:

Tags: FUTEBOL ANIVERSÁRIO PRIMUS

De acordo com as tags gostaria que aparecessem as noticias relacionadas com estas tags.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

14-04-2010 09:08

Dá uma olhada no link acima que acho que vai te servir, você só tem que atribuir as palavras-chave como índice do array.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

14-04-2010 09:29

Então web, eu fiz da forma que falou, mas me retorna o mesmo resultado, pegando apenas os dados da ultima tag.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

14-04-2010 11:57

Eu fiz um teste aqui e está retornando certo. Com base no script que indiquei, estou tendo problema, porque só consigo obter os dados se coloco o valor do array manualmente na query. Pode ser esse o problema ai, vou verificar aqui e já respondo.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

14-04-2010 13:26

Ok, fico no aguardo.

O select deve estar dentro do Laço do For?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

14-04-2010 14:28

O select é a sua query, que vai retornar os dados do BD

Uma alternativa que encontrei aqui foi fazer o seguinte:

Você define os campos para palavra chave, tipo:

$palavra1 = "abc";
$palavra2 = "123";

No select vai ficar assim:
SELECT * FROM suatabela WHERE campo_a_ser_comparado IN('$palavra1', '$palavra2')

Não tem problema se uma palavra vier vazia, porque ele retorna a que tiver valor e for igual.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

14-04-2010 15:59

Não deu certo, a consulta acredito estar correta

seria assim: select * from tb_topicos where cp_tags IN('CURTINHAS,POLEMICAS');

mas não me retorna resultado nenhum

mesmo eu fazendo esta consulta diretamente no phpmyadmin, me retorna zero
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

14-04-2010 16:01

Cada valor entre aspas

select * from tb_topicos where cp_tags IN('CURTINHAS','POLEMICAS');
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

14-04-2010 16:22

Mesmos com as aspas, não me retorna nada.
<?php echo"<hr /><strong>Tags:</strong> "; $a = mysql_query("select cp_tags from tb_topicos where ID=$id"); if($seleciona_tags = mysql_fetch_array($a)){ extract($seleciona_tags); $palavras = explode(", ", $cp_tags); $campos = array(); foreach($palavras AS $tags) { $campos[] = "'$tags'"; echo "&nbsp;<a href=\"view_tags&cp_tags=$tags\">$tags</a>&nbsp;"; } echo"<hr />"; $dados = implode(", ", $campos); } $n = $_GET['ID']; echo"<div class=\"esq\"><img class=\"img\" src=\"imgs/site/links_relacionados.jpg\" alt=\"\" /></div> <div class=\"dir\"> <ul>"; $rel = mysql_query("select * from tb_topicos where cp_tags IN('$dados') AND ID<>'$n' order by cp_data desc limit 4"); $nr_linhas = mysql_num_rows($rel); for($i=0;$i<$nr_linhas;$i++){ $campo = mysql_fetch_assoc($rel); $idd = $campo['ID']; $tit = $campo['cp_titulo']; $cp_tipo = $campo['cp_tipo']; include 'links_page.php'; echo" <li style=\"list-style-type:disc; color: #f90;\"><a href=\"$link/$idd\">$tit</a></li> "; } echo"</ul></div>"; ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

14-04-2010 16:38

Acho que você não observou um post que coloquei acima, que dessa forma que você usou ('$dados') não está funcionando, e que teria que criar os valores para passar, vê ai acima, onde coloquei: $palavra1 e $palavra2
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

14-04-2010 16:47

Mas palavra 1 e 2, vc não colocou como se fosse manualmente, no meu o responsavel pelo site cadastra varias tags e não apenas duas.

E da forma que coloquei, apareceu certinha as tags dentro das aspas. Como vc pode conferir no endereço abaixo:
http://www.mundodosociety.com.br/entrevista/15

Veja que abaixo teria que aparecer os links relacionados. Mas fica em branco.

Adiciona as aspas.
$campos[] = "'$tags'";
Adiciona virgula e espaço.
$dados = implode(", ", $campos);

Faz a busca
$rel = mysql_query("select * from tb_topicos where cp_tags IN('$dados') AND ID<>'$n' order by cp_data desc limit 4");

Tudo certo, mas nada de resultado.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

14-04-2010 16:51

Foi como eu disse, não sei o que está ocorrendo, mas, essa forma ai com array e implode não está rodando, mesmo não dando erro.

O que te indico é no while que cria as palavras, você criar essas variáveis como global, ai fazer o esquema que disse, estabelece um número mínimo de palavras chave e faz o esquema que indiquei lá acima.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

15-04-2010 13:26

Web blz, tentei de todas as formas fazer do jeito que falou, também aqui localmente funciona, mas no servidor do site, não. Então mudei algumas coisas no código e usando o LIKE como estava usando funcionou, não sei se isto é gambiarra, mas pelo menos deu certo, veja no código abaixo, vlw pela ajuda:

<?php echo"<hr /><strong>Tags:</strong> "; $a = mysql_query("select cp_tags from tb_topicos where ID=$id"); if($seleciona_tags = mysql_fetch_array($a)){ $palavras = explode(", ", $seleciona_tags['cp_tags']); $campos = array(); foreach($palavras AS $tags) { $campos[] = "cp_tags LIKE '%$tags%'"; //$palavras = explode(", ", $cp_tags); //foreach ($palavras as &$tags) { //echo $tags; echo "&nbsp;<a href=\"view_tags&cp_tags=$tags\">$tags</a>&nbsp;"; } } $dados = implode(" OR ", $campos); echo"<hr />"; //echo 'Tags com as Aspas: '.$dados; Aqui eu posso ver se a variavel esta funcionado. // Testei esta funcionando legal: Tags com as Aspas: cp_tags LIKE '%CURTINHAS%' OR cp_tags LIKE '%POLEMICAS% $n = $_GET['ID']; echo"<div class=\"esq\"><img class=\"img\" src=\"imgs/site/links_relacionados.jpg\" alt=\"\" /></div> <div class=\"dir\"> <ul>"; $sql = "select * from tb_topicos "; $sql .= "WHERE $dados"; $sql .= " order by cp_data desc limit 4"; $rel = mysql_query($sql) or die (mysql_error()); $nr_linhas = mysql_num_rows($rel); for($i=0;$i<$nr_linhas;$i++){ $campo = mysql_fetch_assoc($rel); $idd = $campo['ID']; $tit = $campo['cp_titulo']; $cp_tipo = $campo['cp_tipo']; include 'links_page.php'; echo"<li style=\"list-style-type:disc; color: #f90;\"> <a href=\"$link/$idd\">$tit</a> </li> ";} echo"</ul></div><br />"; //echo $sql; Aqui eu se passou o mysql_query corretamente. // Também deu certo. // Imprimindo assim: select * from tb_topicos WHERE cp_tags LIKE '%CURTINHAS%' OR cp_tags LIKE '%POLEMICAS%' order by cp_data desc limit 4

No primeiro momento estava dando um erro de sintax, com problemas com as aspas, mas fui almoçar e testei agora está funcionando normal, vai entender.

Abçs

Outra coisa que esqueci de mencionar, eu coloquei "AND ID!=$n" para que não aparecesse a noticia corrente, mas mesmo assim ela aparece.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

15-04-2010 15:38

Sempre limite o valor que está vindo externo na query

where ID='$id'

Aspas simples porque sua query é aberta e fechada com aspas dupla.

No caso de sua dúvida, limite também o $id, se não der certo, use

&& ID !='$id'
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

15-04-2010 15:44

Então o erro não é por causa das aspas e sim por que tem noticias que não esta pegando as tags

Ficando o select assim:
select ID, cp_titulo, cp_tipo from tb_topicos WHERE && ID!='225' order by cp_data desc limit 4

Já procurei no código inteiro e não achei nem um motivo, para não achar as tags

da uma olhada.
http://www.mundodosociety.com.br/agendadasemana/225

Só que como vc pode ver ele acha as tags, mas por algum motivo não trata elas com explode, implode, etc...

Continuando, o correto pelo script seria:

$sql = "select ID, cp_titulo, cp_tipo from tb_topicos "; $sql .= "WHERE $dados"; $sql .= " && ID!='$n' order by cp_data desc limit 4"; Select ID, cp_titulo, cp_tipo from tb_topicos WHERE $dados && ID!=$n order by cp_data desc limit 4

Mas está ocultando a variável $dados.

no aguardo
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

15-04-2010 16:28

A query está sem lógica

select ID, cp_titulo, cp_tipo from tb_topicos WHERE && ID!='225' order by cp_data desc limit 4

Where &&...

O correto seria:

SELECT campo1, campo2 FROM suatabela WHERE essecampo='isso aqui' && ID!='desse valor' ORDER BY...
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166

Buscar dados de acordo com as tags

15-04-2010 16:39

Isso que estou te explicando tem algumas noticias que esta assim, não descobri o porque.

Nesta página não funciona.
http://www.mundodosociety.com.br/agendadasemana/225

Nesta já funciona normalmente com o mesmo código.
http://www.mundodosociety.com.br/seliganessa/227

Veja a impressão do código, como está diferente.

Tem até algo estranho, tipo na hora que faço o explode das virgulas e tiro o espaço também, e na pagina que está dando erro, o espaço não é retirado
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Buscar dados de acordo com as tags

15-04-2010 17:27

A o select é rodado no servidor, o que verei pelo código fonte é HTML.

Você tem que fazer um exemplo simples, tipo 1 ou 2 campos e faz a comparação, se não der, zip o sql com uns 3 resultados e a consulta que está tentando e posta o link aqui.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Bing [Bot]