RodrigoAv 0 Denunciar post Postado Maio 18, 2013 Boa Tarde. Estou com um problema no campo de pesquisa. Ex. Em minha tabela eu tenho 2 registros inseridos cada uma com 3 Campos Nome Endereço telefone Valores: Pedro Vila Mariana 555 5555 Se no campo pesquisa eu insiro: Pesquisar por " Pedro" Ele me retorna a pesquisa normal. Agora, se no campo pesquisa eu insiro: Pesquisar por " Pedro na Vila Mariana" Ele não me retorna nada. Pensei que com o WHERE CONCAT eu conseguiria fazer isso, porém, ...eu não consigo erar resultados usando strings compostas Esta assim $sql = mysql_query("SELECT * FROM tab_news WHERE CONCAT( tag, ' ',texto ) LIKE '%$get%' OR titulo LIKE '%$get%' ORDER BY id DESC LIMIT $inicio, $limite") or die("Erro ao consultar"); Campos na Tabela: Titulo Texto Tag O $get é o valor inserido no campo busca. Minha dúvida é como eu inserir uma palavra composta e ele efetuar a pesquisa geral e me trazer o resultado. No aguardo. Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Maio 18, 2013 com o like não funciona? SELECT * FROM 'tabela' WHERE campo LIKE "%termo%" Porém,recomendo a leitura http://www.criarweb.com/artigos/programar-buscador-com-php-e-mysql.html http://www.adrianoweb.com.br/prospero/modules/wordpress/?p=80 Compartilhar este post Link para o post Compartilhar em outros sites
RodrigoAv 0 Denunciar post Postado Maio 18, 2013 Boa Tarde Marcos. Com o LIKE também nao vai. Tentei concatenar com LIKE '.%$get%.' ai piorou tudo ele não retorna nada. Ja tentei de inumeras formas e to começando a crer que não solução. Um outro exemplo para ser claro do que quero que ele faça: Na Tabela eu tenho os Campos titulo tag No campo titulo tem o valor: LOPES IMOVEIS no campo tag tem: imobiliarias, imobiliaria na lapa, lapa, Se eu pesquisar no form de pesquisa por: LOPES IMOVEIS NA LAPA. Ele não me retorna nada. Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Maio 18, 2013 Nos links que passei seu problema será resolvido, porém, leia os dois. Trata-se da função MATCH(busca x, busca y, .... ) AGAINST(termo desejado) Compartilhar este post Link para o post Compartilhar em outros sites
RodrigoAv 0 Denunciar post Postado Maio 18, 2013 Fiz da forma como lido no arquivo. ("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ") or die("Erros ao consultar"); Há um detalhe, na minha tabela nao tem o tipo FULLTEXT , só tem LONGTEXT ...então modifiquei o tipo dos campos titulo, tag e texto para LONGTEXT Porém ele retornou or die Erro do consultar. Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Maio 18, 2013 Não executou a query. Dá um echo $sql e posta o resultado ae. Compartilhar este post Link para o post Compartilhar em outros sites
RodrigoAv 0 Denunciar post Postado Maio 18, 2013 Codigo na integra: <div class="result"> <?php $get = $_GET['busca']; $pagina = $_GET['pagina']; // DEFINA AQUI O LIMITE DE RESULTADOS POR PÁGINA $inicio = 0; $limite = 6; if($get == ""){ $get = 'Æ';} if($pagina != ''){ $inicio = ($pagina - 1) * $limite;} $sqlContar = mysql_query("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ") or die("Erros ao consultar"); $total = mysql_num_rows($sqlContar); if($get != 'Æ'){ echo '<div class="info">Resultados: <b>'.$total.'</b></div>'; echo '<ul>'; } $sql = mysql_query("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ORDER BY id DESC LIMIT $inicio, $limite") or die("Erro ao consultar"); while($res = mysql_fetch_array($sql)){ ?> <li> <h2><a href="<?php echo $res['link'];?>" target="_blank"><?php echo $res['titulo'];?></a></h2> <span><a href="<?php echo $res['link'];?>" target="_blank"><?php echo substr($res['texto'],0,80).'...';?></a></span> </li> <li> <h2><?php echo $res['end'];?></h2> </li> <li><?php echo '<br />'; }?></li> </ul> <?php TABLE -- Estrutura da tabela `tab_news` -- CREATE TABLE IF NOT EXISTS `tab_news` ( `id` int(11) NOT NULL AUTO_INCREMENT, `titulo` longtext, `texto` longtext, `link` text NOT NULL, `tag` longtext NOT NULL, `end` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ; O tipo da estrutura da Table é MyISAM como especifica na materia que voce indicou. Ele esta retornando o or die da $sqlContar pois é uma busca com paginação <div class="result"> <?php $get = $_GET['busca']; $pagina = $_GET['pagina']; // DEFINA AQUI O LIMITE DE RESULTADOS POR PÁGINA $inicio = 0; $limite = 6; if($get == ""){ $get = 'Æ';} if($pagina != ''){ $inicio = ($pagina - 1) * $limite;} $sqlContar = mysql_query("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ") or die("Erros ao consultar"); $total = mysql_num_rows($sqlContar); if($get != 'Æ'){ echo '<div class="info">Resultados: <b>'.$total.'</b></div>'; echo '<ul>'; } $sql = mysql_query("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ORDER BY id DESC LIMIT $inicio, $limite") or die("Erro ao consultar"); while($res = mysql_fetch_array($sql)){ ?> <li> <h2><a href="<?php echo $res['link'];?>" target="_blank"><?php echo $res['titulo'];?></a></h2> <span><a href="<?php echo $res['link'];?>" target="_blank"><?php echo substr($res['texto'],0,80).'...';?></a></span> </li> <li> <h2><?php echo $res['end'];?></h2> </li> <li><?php echo '<br />'; }?></li> </ul> <?php Table -- Estrutura da tabela `tab_news` -- CREATE TABLE IF NOT EXISTS `tab_news` ( `id` int(11) NOT NULL AUTO_INCREMENT, `titulo` longtext, `texto` longtext, `link` text NOT NULL, `tag` longtext NOT NULL, `end` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ; Melhor assim, dessa forma Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Maio 18, 2013 Dá um echo $sqlContar Pode ser algum erro causado pelas variáveis $inicio ou $limite Compartilhar este post Link para o post Compartilhar em outros sites
RodrigoAv 0 Denunciar post Postado Maio 18, 2013 O erro esta vindo da $sqlContar Veja que defini o or die do $sqlContar como Erros ao consultar e da $sql como: Erro ao consultar. Na pesquisa ele esta me retornando : Erros ao consultar . O echo da $sql é este ? <li> <h2><a href="<?php echo $res['link'];?>" target="_blank"><?php echo $res['titulo'];?></a></h2> <span><a href="<?php echo $res['link'];?>" target="_blank"><?php echo substr($res['texto'],0,80).'...';?></a></span> </li> <li> <h2><?php echo $res['end'];?></h2> </li> <li><?php echo '<br />'; }?></li> Perdão , sou novo nessa linguagem não sei se é esse exatamente o echo $sql Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Maio 19, 2013 Assim ..... $sqlContar = mysql_query("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ") or die("Erros ao consultar"); echo $sqlContar; // ou print $sqlContar; ?> Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Maio 19, 2013 Assim ..... $sqlContar = mysql_query("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ") or die("Erros ao consultar"); echo $sqlContar; // ou print $sqlContar; ?> Compartilhar este post Link para o post Compartilhar em outros sites
RodrigoAv 0 Denunciar post Postado Maio 19, 2013 Bom Dia Marcos. com o echo ele continua retornando o "erros ao consultar". $sqlContar = mysql_query("SELECT * FROM tab_news WHERE MATCH(titulo,tag,texto) AGAINST ('$get') ") or die("Erros ao consultar"); print $sqlContar; // ou print $sqlContar; Tentei tanto com o echo como o print e continua retornando o Erros ao consultar. Eu tenho uma suspeita do porque esta dando este erro: A função match e against só funcionam se o tipo do campo for FULLTEXT e eu inseri LONGTEXT ( pois não tem a opção fulltext). eu não estou sabendo como deixar fulltext , pois meu servidor esta de acordo para ter Software version: 5.1.66-cll - MySQL Community O FULLTEXT esta liberado desde de a versão 4.0 e o meu tipo também é MYISAM porem será que há alguma forma de inserir o FULLTEXT diretamente no arquivo tab_new.sql e importar denovo? Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Maio 19, 2013 To de saída aqui Rodrigo. Dá uma lida no manual do mysql http://dev.mysql.com/doc/refman/5.1/en/fulltext-natural-language.html Não é o tipo de dados que deve ser FULL TEXT e sim o índice Veja parte do texto(leia com calma o artigo) http://www.adrianoweb.com.br/prospero/modules/wordpress/?p=80 ... " Para fazer essa pesquisa foi necessário criar um index FULLTEXT na tabela xoops_wp_posts com os dois campos. É necessário criar um índice FULLTEXT ". ... ps. Foi mal pelo post duplicado. Devo ter feito alguma !@#$%"aqui. Compartilhar este post Link para o post Compartilhar em outros sites
RodrigoAv 0 Denunciar post Postado Maio 20, 2013 Acho que descobri o motivo. Acabei decobrindo que o meu Mysql é na verdade a versão 3.5.5 e a função MATCH AGAINST e FULLTEXT Acho que descobri o motivo. Acabei decobrindo que o meu Mysql é na verdade a versão 3.5.5 e a função MATCH AGAINST e FULLTEXT roda apenas na versao 4.0. O meu provedor de hospedagem não faz upgrade na versao. Há alguma forma de eu atualizar o meu mysql manualmente ? Compartilhar este post Link para o post Compartilhar em outros sites