Ir para conteúdo

POWERED BY:

Arquivado

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

s-bayt

Pesquisa em varias tabelas

Recommended Posts

Bom dia a todos

 

Estou com um problema que não estou a conseguir resolver.

Quero fazer uma pesquisa por palavra em varias tabelas de uma BD ao mesmo tempo, com apresentação dos resultados logo a seguir, e só estou a conseguir fazer em uma tabela, neste caso a "ultimos".

Como posso, com o codigo que posto a seguir, fazer a pesquisa em varias tabelas?

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Sistema de busca interna com PHP/MySQL</title>
</head>
 
<body>
<form name="frmBusca" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>?a=buscar" >
    <input type="text" name="palavra" />
    <input type="submit" value="Buscar" />
</form>
 
<?php
// Conexão com o banco de dados
$conn = @mysql_connect("localhost", "xxxxxxxx", "xxxxxxxxx") or die("Não foi possível a conexão com o Banco");
// Selecionando banco
$db = @mysql_select_db("xxxxxxxx", $conn) or die("Não foi possível selecionar o Banco");
 
// Recuperamos a ação enviada pelo formulário
$a = $_GET['a'];
 
// Verificamos se a ação é de busca
if ($a == "buscar") {
 
	// Pegamos a palavra
	$palavra = trim($_POST['palavra']);
 
	// Verificamos no banco de dados produtos equivalente a palavra digitada
	$sql = mysql_query("SELECT * FROM ultimos WHERE alt LIKE '%".$palavra."%' ORDER BY data DESC");
 
	// Descobrimos o total de registros encontrados
	$numRegistros = mysql_num_rows($sql);
 
	// Se houver pelo menos um registro, exibe-o
	if ($numRegistros != 0) {
		
		// Exibe os conteudos
			?>
            
   <table width="660" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td colspan="2"><span class="textoBrancoTitulos">P</span><span class="textoRosaTitulos">esquisa</span></td>
  </tr>
  <tr>
    <td colspan="2" height="15"></td>
  </tr>
  <tr>
    <td width="129"> </td>
    <td width="531" class="noticiasTitulo"><div id="noticias"><?php	while ($produto = mysql_fetch_object($sql)) { echo '<div><p><strong><span class="noticiasTitulo">' . $produto->titulo . '</span></strong><br /><span class="noticiasTexto">' .$produto->subtitulo. '</span><br /><span class="noticiasData">' .$produto->data. '</span><img src="../images/upload/ultimos/'.$produto->foto.'" width="120" height="88" /><br />
<span class="noticiasTexto">----------------------------------------------------------------------------------------------------------------------------------</span><br>
    </p></div>';?>
		<?php }
	// Se não houver registros
	} else {
		echo "Nenhum produto foi encontrado com a palavra ".$palavra."";
	}
}
?>
    </div>
    </td>
  </tr>
</table>    

Alguem me pode ajudar

 

Obrigado

 

S-Bay

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com um problema que não estou a conseguir resolver.

Quero fazer uma pesquisa por palavra em varias tabelas de uma BD ao mesmo tempo, com apresentação dos resultados logo a seguir, e só estou a conseguir fazer em uma tabela, neste caso a "ultimos".

Como posso, com o codigo que posto a seguir, fazer a pesquisa em varias tabelas?

 

Como você não passou o formato das suas tabelas vou mostrar o conceito, ai você terá que adaptar:

 

Criando 3 tabelas, primeiros, ultimos e outros

mysql> create table `primeiros` (
    -> `id` mediumint(8) unsigned not null auto_increment,
    -> `palavra` varchar(20) not null,
    -> primary key(`id`),
    -> key `palavras`(`palavra`)
    -> ) engine=MyISAM;
Query OK, 0 rows affected (0.01 sec)

mysql> create table `ultimos` (
    -> `id` mediumint(8) unsigned not null auto_increment,
    -> `palavra` varchar(20) not null,
    -> primary key(`id`),
    -> key `palavras`(`palavra`)
    -> ) engine=MyISAM;
Query OK, 0 rows affected (0.01 sec)

mysql> create table `outros` (
    -> `id` mediumint(8) unsigned not null auto_increment,
    -> `palavra` varchar(20) not null,
    -> primary key(`id`),
    -> key `palavras`(`palavra`)
    -> ) engine=MyISAM;
Query OK, 0 rows affected (0.01 sec)

Agora inserindo alguns dados:

 

mysql> insert into `primeiros`(`palavra`) values('Teste'),('Testando'),('Joao'),('Neto');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> insert into `ultimos`(`palavra`) values('Teste'),('Joao'),('Neto');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into `outros`(`palavra`) values('Joao'),('Neto');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Certo, vamos fazer uma busca pela palavra Testando, que só aparece na tabela primeiros

 

mysql> select
    ->    p.`palavra` "primeiros",
    ->    u.`palavra` "ultimos",
    ->    o.`palavra` "outros"
    -> from
    ->    `primeiros` p
    -> left join
    ->    `ultimos` u
    -> on
    ->    u.`palavra` = "Testando"
    -> left join
    ->    `outros` o
    -> on
    ->    o.`palavra` = "Testando"
    -> where
    ->    p.`palavra` = "Testando";
+-----------+---------+--------+
| primeiros | ultimos | outros |
+-----------+---------+--------+
| Testando  | NULL    | NULL   |
+-----------+---------+--------+
1 row in set (0.00 sec)

Como pode ver, ultimos e outros ficaram como NULL, apenas primeiros trouxe um resultado. Agora vamos ver a busca pela palavra Neto, que tem em todas as tabelas:

 

mysql> select
    ->    p.`palavra` "primeiros",
    ->    u.`palavra` "ultimos",
    ->    o.`palavra` "outros"
    -> from
    ->    `primeiros` p
    -> left join
    ->    `ultimos` u
    -> on
    ->    u.`palavra` = "Neto"
    -> left join
    ->    `outros` o
    -> on
    ->    o.`palavra` = "Neto"
    -> where
    ->    p.`palavra` = "Neto";
+-----------+---------+--------+
| primeiros | ultimos | outros |
+-----------+---------+--------+
| Neto      | Neto    | Neto   |
+-----------+---------+--------+
1 row in set (0.00 sec)

As 3 colunas trouxeram o resultado, agora é só adaptar para o que você precisa...

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.