Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RodrigoAv

Problemas com Select do Mysql

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.