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

Sistema de busca.


Samara

Pergunta

Olá pessoal

Estou aqui novamente com outra dúvida.

Tenho um banco de dados, e nele 54 tabelas...

É possível fazer um formulário de busca em uma página HTM ou PHP que faz a consulta em todas essas tabelas? :blink: Eu sei fazer quando é apenas em 1 tabela, por exemplo:

Um formulário “buscar no site” ou coisa assim, pra pesquisar em todas as tabelas e encontrar tudo que for relacionado, posso usar “LIKE”, e “% “para isso , mas o que não sei é buscar em todas as tabelas de uma vez só...Tem como fazer isso? Alguém pode me dar um exemplo? :unsure:

Agradeço a atenção de todos.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olha ate dá, eu já fiz isso usando UNION e UNION ALL porém tem uns detalhes, da uma pesquisada

vou colocar um exemplo só pra te dar uma luz de como fazer, porém 54 tabelas teria q ver o que elas tem em comum e tal, eu já fiz com 3 tabelas no maximo, mas da pra fazer com mais.

if (strpos($_GET['busca'], '"') === false) {
    $a = explode(' ',$_GET['busca']);
    $query = array();
    $palavra =  array();
    foreach ($a as &$v) {
        if(trim($v)!=""){
            $palavra[] = trim($v);    
            $query[] = " titulo LIKE '%".addslashes(trim($v))."%' OR conteudo LIKE '%".addslashes(trim($v))."%' ";
        }    
    }
    
    
} else {
    
    $a = explode('"',$_GET['busca']);
    if(empty($a[0])){    
        array_shift($a);
    }else{
        $arr = explode(" ",$a[0]);
        array_merge($a,$arr);
    }
    $final = count($a)-1;
    if(empty($a[$final])){    
        array_pop($a);
    }else{
        $arr = explode(" ",$a[$final]);
        array_merge($a,$arr);
    }
    
    
    $query = array();
    $palavra =  array();
    foreach ($a as &$v) {
        if(trim($v)!=""){
            $palavra[] = trim($v);    
            $query[] = " titulo LIKE '%".addslashes(trim($v))."%' OR conteudo LIKE '%".addslashes(trim($v))."%' ";
        }    
    }
    
    
    
}

$query = implode(" OR ",$query);

$sql = "
            SELECT  
                'mostra_noticia' as origem, id,titulo,conteudo FROM  noticias 
            WHERE 
                {$query} 
            
            UNION 
            
            SELECT  
                'pagina' as origem, id,titulo,conteudo  FROM  paginas
            WHERE 
                {$query} 
            
            ORDER BY id DESC
            
            
            ";

Editado por Daniel L.
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Daniel L

deu certo aqui ^_^ fiz de outra forma, criei um recordset resultante para cada tabela... uuh, da mais trabalho , mas funcionou. De qualquer forma obrigada pela ajuda :) ... procurei na internet sobre UNION, tambén da certo, mas achei muito complicado de fazer, bom pra falar a verdade tambén por que não entendi por completo hehe...Obrigada pela atenção... posso te adicionar como amigo?

Editado por Samara
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Visitante

criei um recordset para cada tabela de onde é feita a consulta

fiz um exemplo, nele tenho um banco de dados que se chama "Al" e uso como ex. duas tabelas "tabela1 e tabela2"

na página de busca, fiz um formulário usando o método GET , e um campo "text" com nome de "busca"

<?php require_once('Connections/Al.php'); ?>

<?php

$busca_tabela1 = "*.*"; /* "aqui inicia a consulta na tabela 1" */

if (isset($_GET['busca'])) {

$busca_tabela1 = (get_magic_quotes_gpc()) ? $_GET['busca'] : addslashes($_GET['busca']); /* a variável "$_GET['busca']é meu parâmetro de busca, vem da página anterior "é a resposta do formulário de buscas */

}

mysql_select_db($database_Al, $Al);

$query_tabela1 = "SELECT * FROM tabela_1 WHERE tabela_1.linha_1_titulo LIKE '%busca%'";

$tabela1 = mysql_query($query_tabela1, $Al) or die(mysql_error());

$row_tabela1 = mysql_fetch_assoc($tabela1);

$totalRows_tabela1 = mysql_num_rows($tabela1);

$busca_tabela2 = "*.*";/* "aqui inicia a consulta na tabela 2" */

if (isset($_GET['busca'])) {

$busca_tabela2 = (get_magic_quotes_gpc()) ? $_GET['busca'] : addslashes($_GET['busca']);

}

mysql_select_db($database_Al, $Al);

$query_tabela2 = "SELECT * FROM comentarios WHERE comentarios.coment_referente LIKE '%busca%'";

$tabela2 = mysql_query($query_tabela2, $Al) or die(mysql_error());

$row_tabela2 = mysql_fetch_assoc($tabela2);

$totalRows_tabela2 = mysql_num_rows($tabela2);

?>

<head>

<title>*Samara* teste de buscas.</title>

</head>

<body>

EXIBINDO AS INFORMAÇÕES ENCONTRADAS:

Tabela 1:

Linha 1 da tabela 1 <?php echo $row_tabela1['linha_1_titulo']; ?>

Linha 2 da tabela 1 <?php echo $row_tabela1['linha_2']; ?>

/* aqui é apenas um exemplo com as 2 primeiras linhas de cada tabela, você pode mandar exibir apenas

aquelas linhas das quais você espera que o resultado seja retirado. Ou então mandar exibir todas as linhas

de cada tabela. */

Tabela 2:

Linha a da tabela 2<?php echo $row_tabela2['linha_a']; ?>

Linha b da tabela 2<?php echo $row_tabela2['linha_b']; ?>

</body>

</html>

<?php

mysql_free_result($tabela1);

mysql_free_result($tabela2);

?>

no exemplo, fiz apenas com 2 tabelas, mas pode ser feito com mais tabelas. Em meu caso fiz para 54 tabelas, até deu certo, mas quando mando pesquisar, demora pra carregar a página de resposta...

Editado por Samara
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

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