Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Consulta sql complicada


Carlos Rocha

Pergunta

Ola pessoal.

Estou precisnando de umka forçona de voces:

Seguinte.; Tenho 03 tabelas que se envolverão nessa pesquisa. São elas: anunciantes, seguimento e subseguimento.

Gostaria de fazer essa pesquisa da seguinte forma.

O usuario digitaria num campo de texto um determinada palavra e depois se faria um select nas tres tabelas e faria uma pesquisa por aproximação tipo:

O usuario digita la "jg" e no banco tem la na tabela de anunciantes "J.G. Freitas & Cia Ltda" ou digita beleza e tm la na tabela de Seguimento o seguimento "Beleza" e o select acha.

Depois, caso haja retorno das tres TABELAS ou seja, todas as tres tabelas tenha um ou mais campos que satisfgaçam a pesquisa posso depis com php dar o retornmo para que o usuario possa eascolher na opçao quie quiser.

Grato por quialquer ajuda?!

Uso Mysql 5 e php 5 e o campo das tabelas são :

anunciantes ->nome

seguimento -> titulo

subseguimento-> titulo

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'Carlos Rocha'!

Desculpe a demora na resposta. Nem sempre é fácil encontrar uma solução quando estamos atarefados.

Há duas formas de buscar o que você quer.

Uma delas você usará o LIKE e na outra você usará índices fulltext.

Inicialmente vou colocar uma SQL com a pesquisa pelo LIKE.

A vantagem desta pesquisa é a simplicidade a desvantagem é que sempre será executada em TABLE SCAN.

Um outro ponto é que não estou conseguindo identificar de podemos usar um join para realizarmos uma única consulta.

Partindo do princípio que não há uma ligação entre as tabelas, então serão três SQLs e você deverá tratar os resultados via programa.

Seria assim:

SELECT SQL_CALC_FOUND_ROWS nome 
FROM anunciantes 
WHERE nome LIKE "%<sua-variável>%";
Antes de realizar a consulta com a próxima tabela armazene o resultado da consulta abaixo em uma variável.
SELECT FOUND_ROWS();

Esta segunda consulta retorna o número de linhas que a primeira consulta gerou.

Agora, de modo semelhante faça as outras 4 consultas.

Se o resultado das tres variáveis contadoras de linha for diferente de 0 (em cada uma), então você pode prosseguir com seu plano.

Veja este link sobre SQL_CALC_FOUND_ROWS

Link para o comentário
Compartilhar em outros sites

  • 0

cara fiz um "troço" meio que cavernoso aqui. Mas, enfim. Func.

<p>&nbsp;</p>
<center><font size='+2'>Você obteve os seguintes resultados<br>para sua pesquisa:</font></center><br><br>
<?
if ($acao != "pesquisa") 
{ echo "<center>Voc&ecirc; n&atilde;o esta fazendo pesquiza alguma pois n&atilde;o digitou nada na caixa ao lado!</center>";}
?>
<?
if ($acao == "pesquisa") {    
if ($valor == "") 
{ echo "<center>Voc&ecirc; n&atilde;o esta fazendo pesquiza alguma pois n&atilde;o digitou nada na caixa ao lado!</center>";}
else {                                           
$busca_anunciante = mysql_query("select id, nome, seguimento, subseguimento from anunciantes where nome like '%$valor%' and bloqueio='n'");
$busca_seguimento = mysql_query("select id, titulo from seguimentos where titulo like '%$valor%' or soundex(titulo) = soundex('$valor')");
$busca_subseguimento = mysql_query("select id, titulo from sub_seguimentos where titulo like '%$valor%' or soundex(titulo) = soundex('$valor')");

$conta_anunciante = mysql_num_rows($busca_anunciante);
$conta_seguimento = mysql_num_rows($busca_seguimento);
$conta_subseguimento = mysql_num_rows($busca_subseguimento);
/*
function voce_quis_dizer($palavra_procurada,$dicionario) {
       //$dicionario = unserialize(file_get_contents('dicionario_serializado.dat'));
       $minima_distancia = -1;
       $palavra_procurada = strtolower($palavra_procurada);
       foreach($dicionario as $palavra_do_dicionario) {
               if($palavra_procurada == $palavra_do_dicionario) return $palavra;
               $distancia = levenshtein($palavra_procurada,$palavra_do_dicionario);
               if($distancia < $minima_distancia || $minima_distancia == -1) {
                       $minima_distancia = $distancia;
                       $sugestao = $palavra_do_dicionario;
               }
       }
return $sugestao;
}
*/

function voce_quis_dizer($output,$library){
   for($i=0;$i<count($library);$i++){
      $suggestion[$i]['proximity'] = levenshtein(soundex($output),soundex($library[$i]))*100/strlen($library[$i]);
      $suggestion[$i]['word'] = $library[$i];
                                    }
   sort($suggestion);
   return $suggestion[0]['word'];
                                         }
?>
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><H3>Como Anunciantes</H3></td>
    <td><H3>Como Seguimentos</H3></td>
    <td><H3>Como Subseguimentos</H3></td>
  </tr>
  <tr>
    <td valign="top">
<?
if ($conta_anunciante==0) {
                    $query = mysql_query("SELECT nome FROM anunciantes where bloqueio='n'");
                    if (mysql_num_rows($query)==0) {echo "Nenhum resultado<br>como Anunciante<br>foi encontrado<br> para a tua pesquisa!";}
                    else {
                    print('Você quis dizer?<br><br>');
                    for($x=0;$x<@mysql_num_rows($query);$x++){
                    $fetch = mysql_fetch_array($query);
                    $anun[] = $fetch[0];
                                                             }
                    $vc_quis_diser= voce_quis_dizer($valor,$anun);
                      $sql_final = mysql_query("SELECT id, nome, seguimento, subseguimento FROM anunciantes where nome='$vc_quis_diser' and bloqueio='n'");
                    list($id_anuncia, $nome_anuncia, $id_do_seg,  $id_do_subseg) = mysql_fetch_row($sql_final);                    
                    echo "<a href='anuncios/Anuncios.php?id=$id_anuncia'>$nome_anuncia</a><br>"; 
                         }
                          }
else {
      list($id_anunciante, $nome_anunciante, $seguimento__anunciante, $subseguimento__anunciante) = mysql_fetch_row($busca_anunciante); 
       echo "<a href='anuncios/Anuncios.php?id=$id_anunciante'>$nome_anunciante</a>"; echo "<br>"; 
                         }
?>                         
    </td>
    <td valign="top">
<?
if ($conta_seguimento==0) {
                     if ($id_do_seg) {
                    $sql_final = mysql_query("SELECT id, titulo FROM seguimentos where id=$id_do_seg");
                                    }
                     if ($seguimento__anunciante) {
                    $sql_final = mysql_query("SELECT id, titulo FROM seguimentos where id = $seguimento__anunciante");
                                    }
                    list($id_segui, $titulo_segui) = mysql_fetch_row($sql_final);
                    print('Possiveis opções em<br>Seguimentos<br><br>');                                                             
                    echo "<a href='Seguimentos.php?acao=seg&seg=$id_segui'>$titulo_segui</a><br>";
                          }
else {
      while(list($id_seguimento, $titulo_seguimento) = mysql_fetch_row($busca_seguimento))
       {echo "<a href='Seguimentos.php?acao=seg&seg=$id_do_seg'>$titulo_seguimento</a>"; echo "<br>"; }
                          }
?>    
    </td>
    <td valign="top">
<?
if ($conta_subseguimento==0) {
                     if ($id_do_subseg) {
                    $sql_final = mysql_query("SELECT id, titulo FROM sub_seguimentos where id=$id_do_subseg");
                                    }
                     if ($seguimento__anunciante) {
                    $sql_final = mysql_query("SELECT id, titulo FROM sub_seguimentos where id=$subseguimento__anunciante");
                                    }
                    list($id_subsegui, $titulo_subsegui) = mysql_fetch_row($sql_final);    
                    print('Possiveis opções em<br>Sub Seguimentos<br><br>');                                                             
                    echo "<a href='Seguimentos.php?acao=sub&sub_segui=$id_subsegui'>$titulo_subsegui</a><br>";
                          }
else {
      while(list($id_subseguimento, $nome_subseguimento, $seguimento_subseguimento) = mysql_fetch_row($busca_subseguimento)) 
       {echo "<a href='Seguimentos.php?acao=sub&sub_segui=$id_subseguimento'>$nome_subseguimento</a>"; echo "<br>"; }
                            }
?>    
    </td>
  </tr>
</table>
<?
                }
                }
?>

Vai veno ai!

Obrigado ta?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...