s-bayt 0 Denunciar post Postado Julho 23, 2009 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
João Batista Neto 448 Denunciar post Postado Julho 23, 2009 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