Jump to content


Photo

Fazer Uma Busca No Mysql Baseado Em Um Resultado Do Mysql


  • Faça o login para participar
4 replies to this topic

#1 dark sonic

dark sonic

    12 Horas

  • Usuários
  • 121 posts
  • Sexo:Não informado

Posted 23/02/2007, 21:07

Bom é o seguinte pessoal eu ja usei a busca aki do site e não achei nada que me ajudasse então vamos la

Eu tenho aqui um sistema de noticias do qual eu quero que no fim da noticia ele mostre links para outras noticias relacionada a noticia que eu estou lendo ali no momento !

Qual a logica !!
A logica seria eu pegar o titulo da noticia e fazer um explode nesse titulo da noticia para separar palavra por palavra e com essas palavras eu faço uma busca no meu mysql (tipo LIKE) e mostro todas as noticias (que contenham tais palavras em seu titulo)...

O problema
O problema é que se um titulo tiver um simples de, um, uma, em, ele vai estar associando a consulta e mostrando na tela e eu não quero isso... eu quero que só mostre as palavras como Microsoft, pequena, grande, guerra, paz, apologia, multiplayer e assim em diante...

E está me retornando o seguinte erro

Warning: Illegal offset type in c:\apache\htdocs\projeto_smarty\site\imperium_games\mostra_noticia.php on line 28



Possivel solução
Eu pensei em adicionar um campo no mysql de palavras chaves do qual quando a noticia aparecece eu iria consultar as palavras chaves e apartir delas eu iria fazer a consulta em outros registros p/ ver se as palavras chaves batem e assim mostrar na tela... só que assim ficaria algo mt mecanico, mt manual !!
Então eu queria saber se tem como eu "excluir" tais adjetivos e pronomes dos titulos deixando assim só as palavras "maiores"

Segue meu código
$buscando = explode(" ",$titulo_not);
$o = array($buscando);
$sql_relac = "SELECT titulo FROM noticias WHERE titulo LIKE '%".$buscando[$o]."%' ORDER By RAND() LIMIT 5"; //sendo que aki é minha linha 28
$sql_relac_exe = mysql_query($sql_relac) or die ($error_show.mysql_error());
while($row = mysql_fetch_array($sql_relac_exe)){
$relacionado[] = $row[titulo];
}

tah meio nada a ver esse código pq usando o explode eu ja tenho um array só que eu peguei o resultado do explode e coloquei dentro de outro array... não sei mt bem como lidar com isso, quem conseguir dah um help fico agradecido

ps: vale lembrar que eu estou usando smarty


Obridado desde já !!!

#2 Marcos Aurélio

Marcos Aurélio

    Das terras geladas da Sibéria

  • Usuários
  • 208 posts
  • Sexo:Masculino

Posted 24/02/2007, 02:29

Uma idéia que você ignorar palavras com menos de 4 ou 5 letras, vai ajudar bastante...

#3 dark sonic

dark sonic

    12 Horas

  • Usuários
  • 121 posts
  • Sexo:Não informado

Posted 24/02/2007, 03:13

certo mas como eu faria isso ??

iusando o substr, ereg ??

ou fazendo um for ?

a duvida paira sobre minha pequena mente ^^

e assim eu usando um explode eu ja estou deixando todas as palavras dentro de um array só que como na query eu vou fazer ele procurar por palavra por palavra que estão no meu array vindo do explode ??

quem conseguir postem alguns exemplos

#4 sk15

sk15

    Super Veterano

  • Usuários
  • 2071 posts
  • Sexo:Masculino
  • Localidade:SP - SP

Posted 24/02/2007, 03:20

O problema é que vc está gerando o Array do Array, pois quando vc usar o "explode" ele ja vira um array não tem por que vc jogar ele dentro de outro array ....

Sem contar que vc não esta listado as palavras que foram dividas pelo " ", tente assim ...
$buscando = explode(" ",$titulo_not);

$join_titles = implode("%' || titulo LIKE '%", $buscando);
$sql_relac = "SELECT titulo FROM noticias WHERE titulo LIKE '%". $join_titles ."%' ORDER BY RAND() LIMIT 5";
$sql_relac_exe = mysql_query($sql_relac) or die ($error_show.mysql_error());

while($row = mysql_fetch_array($sql_relac_exe)){
 $relacionado[] = $row[titulo];
}

Edição feita por: sk15, 24/02/2007, 03:21.


#5 dark sonic

dark sonic

    12 Horas

  • Usuários
  • 121 posts
  • Sexo:Não informado

Posted 24/02/2007, 04:00

então essa do explode eu tava vendo que tava fazendo burrada jogar ele dentro de outro array ai por este motivo eu pensei em usar um foreach ai eu acabei fazendo assim

$buscando = explode(" ",$titulo_not);
foreach($buscando as $buscando_2){
$sql_relac = "SELECT * FROM noticias WHERE titulo LIKE '%".$buscando_2."%' LIMIT 5";
$sql_relac_exe = mysql_query($sql_relac) or die ($error_show.mysql_error());
}
while($row = mysql_fetch_array($sql_relac_exe)){
if($row[titulo] == $titulo_not){ // aki eu to verificando se o que veio na busca é o mesmo titulo e se for não mostra nada
echo " ";
}else{
$relacionado[] = $row[titulo];
$data_relac[]  = $row[data];
}
}

e sk15 eu não entendi essa jogada do implode que vc fez tem como explicar ?? eu sei que os || são operadores como se fosse o OR mas qual foi a logica ??

ps: do meu jeito fico vindo só um titulo já do seu jeito fico perfeito !! vlw




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq