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

(Resolvido) Busca em 2 tabelas! aonde eu errei?


Guest --Carla --

Pergunta

Guest --Carla --

Olá Pessoal estou tentando fazer uma busca em duas tabelas:

tabela Noticias

id

titulo

conteudo

tabela paginas

id1

titulo1

texto

a busca tentei assim:

$sql = mysql_query('SELECT * FROM `noticias`, `paginas` WHERE (`noticias`.`texto1` LIKE "%'.$procura.'%") OR (`paginas`.`conteudo` LIKE "%'.$procura.'%")');

e assim:

$sql = mysql_query('SELECT `paginas`.`id`, `paginas`.`conteudo`, `paginas`.`titulo`, `noticias`.`id1`, `noticias`.`texto1`, `noticias`.`titulo1` FROM `noticias`, `paginas` WHERE (`noticias`.`texto1` LIKE "%'.$procura.'%") OR (`paginas`.`conteudo` LIKE "%'.$procura.'%")');

while ($i = mysql_fetch_assoc($sql)) {

echo $i['id1'];

echo $i['titulo1'];

echo "*<br><br>";

echo $i['id'];

echo $i['titulo'];

echo "=<br><br>";

}

Já usei join e union mas nada dá certo, até dois whiles já coloquei. :blink:

Agradeço a ajuda

Mas não deu certo, pois o resultado de uma das tabelas sempre repetem

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Oi, '--Carla --'!

Seja um pouco mais objetiva, por favor.

O que você espera de resultado em sua pesquisa?

Que atributo (campo) relaciona a tabela Noticias com a tabela Paginas?

Como é este relacionamento? uma Notícia pode ter várias páginas ou uma página pode ter várias notícias.?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Carla --
Oi, '--Carla --'!

Seja um pouco mais objetiva, por favor.

O que você espera de resultado em sua pesquisa?

Que atributo (campo) relaciona a tabela Noticias com a tabela Paginas?

Como é este relacionamento? uma Notícia pode ter várias páginas ou uma página pode ter várias notícias.?

Oi Denis

veja bem, tenho um site e ele tem um banco de dados, duas tabelas

tabela Noticias

id

titulo

conteudo

tabela paginas

id1

titulo1

texto

Quero fazer um sistema de busca, $procura e quero que ache todas as palavras $procura nas duas tabelas e me retornem os resultados.

eu tenho funcionando separados ex.

$result1 = mysql_query('SELECT `id`, `titulo`, `conteudo` FROM `paginas` WHERE (`conteudo` LIKE "%'.$procura.'%") OR (`titulo` LIKE "%'.$procura.'%") ');

$result2 = mysql_query('SELECT `id1`, `titulo1`, `texto` FROM `noticias` WHERE (`texto` LIKE "%'.$procura.'%") OR (`titulo1` LIKE "%'.$procura.'%") ');

Mas quero unir para poder fazer a paginação.

TIPO

$sql = mysql_query('SELECT `paginas`.`id`, `paginas`.`conteudo`, `paginas`.`titulo`, `noticias`.`id1`, `noticias`.`texto1`, `noticias`.`titulo1` FROM `noticias`, `paginas` WHERE (`noticias`.`texto1` LIKE "%'.$procura.'%") OR (`paginas`.`conteudo` LIKE "%'.$procura.'%")');

e o resultado eu colocaria desse forma:

<a href=index.php?noticia=$id1>$titulo1</a>

<a href=index.php?pagina=$id>$titulo</a>

Obrigada

Link para o comentário
Compartilhar em outros sites

  • 0

Oi,'--Carla --' !

como você não me respondeu a relação de dependência entre as tabelas, concluo que n~~ao há a possibilidade de fazer JOIN.

Mas, pela característica da resposta que você passou vejo que você pode usar o UNION, ou, no pior caso, uma tabela temporária.

Para uso do UNION faça assim:

SELECT id, titulo, conteudo FROM paginas WHERE (conteudo LIKE "%'.$procura.'%") OR (titulo LIKE "%'.$procura.'%") 
UNION
SELECT id1 AS id, titulo1 AS titulo, texto AS conteudo FROM noticias WHERE (texto LIKE "%'.$procura.'%") OR (titulo1 LIKE "%'.$procura.'%")
Para o uso de uma tabela temporária faça assim: (Criação e Carga)
CREATE TEMPORARY TABLE tabela (
id (do tipo de id na tabela paginas),
titulo (do tipo de id na tabela paginas),
conteudo (do tipo de id na tabela paginas)
)ENGINE = MEMORY;
INSERT INTO tabela (id, titulo, conteudo)
SELECT id, titulo, conteudo FROM paginas WHERE (conteudo LIKE "%'.$procura.'%") OR (titulo LIKE "%'.$procura.'%") 
INSERT INTO tabela (id, titulo, conteudo)
SELECT id1 AS id, titulo1 AS titulo, texto AS conteudo FROM noticias WHERE (texto LIKE "%'.$procura.'%") OR (titulo1 LIKE "%'.$procura.'%")
(Exibição)
SELECT id, titulo, conteudo FROM tabela;
Após a utilização deve-se liberar memória destruindo a tabela temporária.
DROP TABLE tabela;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Carla --

Desculpe a mancada Denis , as tabelas não tem relação.

Fiz da primeira forma como você postou, mas não deu certo, fiz assim:

<?
$procura = "a";

$sql =  mysql_query('SELECT `id`, `titulo`, `conteudo` FROM `paginas` WHERE (`conteudo` LIKE "%'.$procura.'%") OR (`titulo` LIKE "%'.$procura.'%") UNION SELECT `id1` AS `id`, `titulo1` AS `titulo`, `texto1` AS `conteudo` FROM `noticias` WHERE (`texto1` LIKE "%'.$procura.'%") OR (`titulo1` LIKE "%'.$procura.'%") ');


while ($i = mysql_fetch_assoc($sql)) { 


echo "Noticia:<br>";
echo $i['id1'];
echo $i['titulo1'];
echo "<br><br>";

echo "Pagina:<br>";
echo $i['id'];
echo $i['titulo'];
echo "<br><br>";
}

?>

Mas só me retornou as páginas..

Paginas:

24Game Buzzing

Noticia:

Paginas:

25Game Billiards

Noticia:

Paginas:

26Game Sonic

Noticia:

Paginas:

27Game Super Mario

Noticia:

Da segunda maneira que você postou eu nem tentei, acho que o site não vale tanto para todo esse esforço.

Mas mesmo assim agradeço a ajuda, mas se tiver outra ídeia ou solução fico grata.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, '--Carla --'!

Fiz da primeira forma como você postou, mas não deu certo, fiz assim:
Presta atenção que deu certo sim. (de tanto ver código php aqui no forum, já estou aprendendo, ehehe)

Observe que quando você fez o UNION você juntou os atributos das duas tabelas em uma só (Conjunto união 4a. série (antiga 3a.) ensino fundamental. eheh)

Então, os atributos titulo1 e id1 de notícias se fundiram com os atributos titulo e id de paginas. Isto aconteceu por causa do uso da cláusula AS nos atributos (esta cláusula dá um novo nome ao atributo. é um apelido). Sem a cláusula AS não seria possível fazer a união entre as tabelas.

Por causa do que falei acima os atributos id1 e titulo1 retornarão vazios.

Se você quer que saia separado, então é necessário criar um atributo artificial que informará de onde vem a informação.

Para isto faça assim:

<?
$procura = "a";
$sql =  mysql_query('SELECT `id`, `titulo`, `conteudo`, "pag" AS `origem` FROM `paginas` WHERE (`conteudo` LIKE "%'.$procura.'%") OR (`titulo` LIKE "%'.$procura.'%") UNION SELECT `id1` AS `id`, `titulo1` AS `titulo`, `texto1` AS `conteudo`, "not" AS `origem` FROM `noticias` WHERE (`texto1` LIKE "%'.$procura.'%") OR (`titulo1` LIKE "%'.$procura.'%") ');


while ($i = mysql_fetch_assoc($sql)) { 
   if ($i['origem'] = 'pag')
      echo "Noticia:<br>"
   else
      echo "Pagina:<br>";
   echo $i['id'];
   echo $i['titulo'];
   echo "<br><br>";
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Carla --

Okey Professor Denis.. :blush:

Intendi sua explicação..

Se você quer que saia separado, então é necessário criar um atributo artificial que informará de onde vem a informação.

Certo, ai damos nomes a cada chave, uma pag e outra not, até ai foi bem... masssssssssssss.........

tambem não rodou... :wacko:

Agora saiu os dois resultados, mas misturados e tudo como "noticia". :blink:

Noticia:
2Política de privacidade


Noticia:
6Informações.

Noticia:
4Saiba um pouco mais

Noticia:
44Portal no celular

Noticia:
30 Estrada de Ferro

Noticia:
8 História

Noticia:
10 Mapa de Wikimapia

Noticia:
11história.

Noticia:
13Oque é RSS?

Noticia:
20Jogos On-Line
Tentei mudar ,
$sql =  mysql_query('SELECT `id`, `titulo`, `conteudo`, "pag" AS `origem` FROM `paginas` WHERE (`conteudo` LIKE "%'.$procura.'%") OR (`titulo` LIKE "%'.$procura.'%") UNION SELECT `id1`, `titulo1`, `texto1`, "not" AS `origem` FROM `noticias` WHERE (`texto1` LIKE "%'.$procura.'%") OR (`titulo1` LIKE "%'.$procura.'%") ');
Assim ficaria "pag" AS `origem` e "not" AS `origem`, mas tambem não deu certo.. Tambem tentei:
while ($i = mysql_fetch_assoc($sql)) { 
   if ($i['origem'] = 'not'){
e
while ($i = mysql_fetch_assoc($sql)) { 
   if ($i['origem'] = 'pag'){

Tambem sempre sai titulo "Noticia" e os id e titulos misturados..

Eu procurei pela Internet inteira, seja aqui ou lá fora e nada, estou chegando a incrivel conclusão..

Não dá!!

Mesmo assim fico grata Denis,

Obrigada por compartilhar seus conhecimentos..

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, '--Carla --'!

Observe o code abaixo:

create table noticias (
id integer unsigned not null auto_increment,
titulo varchar(50) not null,
conteudo varchar(100) not null,
primary key(id)
);
create table paginas (
id1 integer unsigned not null auto_increment,
titulo1 varchar(50) not null,
texto varchar(100) not null,
primary key(id1)
);
insert into paginas(id1,titulo1,texto)
values (1, 'ffff', 'ff ff ff ff ff ff');
insert into paginas(id1,titulo1,texto)
values (2, 'gggg', 'gg gg gg gg gg gg');
insert into paginas(id1,titulo1,texto)
values (3, 'hhhh', 'hh hh hh hh hh hh');
insert into paginas(id1,titulo1,texto)
values (4, 'iiii', 'ii ii ii ii ii ii');
insert into paginas(id1,titulo1,texto)
values (5, 'jjjj', 'jj jj jj jj jj jj');

insert into noticias(id,titulo,conteudo)
values (1, 'aaaa', 'aa aa aa aa aa aa');
insert into noticias(id,titulo,conteudo)
values (2, 'bbbb', 'bb bb bb bb bb bb');
insert into noticias(id,titulo,conteudo)
values (3, 'cccc', 'cc cc cc cc cc cc');
insert into noticias(id,titulo,conteudo)
values (4, 'dddd', 'dd dd dd dd dd dd');
insert into noticias(id,titulo,conteudo)
values (5, 'eeee', 'ee ee ee ee ee ee');

select id, titulo, conteudo, "NOTICIA" as origem from noticias
union
select id1 as id ,titulo1 as titulo ,texto as conteudo, "PAGINA" as origem  from paginas;
Observe o resultado:
id titulo conteudo          origem
1  aaaa   aa aa aa aa aa aa NOTICIA
2  bbbb   bb bb bb bb bb bb NOTICIA
3  cccc   cc cc cc cc cc cc NOTICIA
4  dddd   dd dd dd dd dd dd NOTICIA
5  eeee   ee ee ee ee ee ee NOTICIA
1  ffff   ff ff ff ff ff ff PAGINA
2  gggg   gg gg gg gg gg gg PAGINA
3  hhhh   hh hh hh hh hh hh PAGINA
4  iiii   ii ii ii ii ii ii PAGINA
5  jjjj   jj jj jj jj jj jj PAGINA

Não é isso que você quer?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Carla --

Isso Denis!!! :D

Isso mesmo que eu quero!!!!!!!!!!!!!!!!!! Yahoooooooooooooooooooo

Desculpe não sou loira mas só tenho dois neuronios...

então o erro está aqui no while

while ($i = mysql_fetch_assoc($sql)) { 
   if ($i['origem'] = 'pag')
      echo "Noticia:<br>";
   echo $i['id'];
   echo $i['titulo'];
   echo "<br><br>";
   else
      echo "Pagina:<br>";
   echo $i['id'];
   echo $i['titulo'];
   echo "<br><br>";
}

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...