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

(Resolvido) pesquisar em mais de uma tabela no mysql


cassianooliver

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0
Pessoal, como faço para fazer uma consulta em mais de uma tabela ao mesmo tempo?

tipo, pesquisar uma palavra em 3 ou 4 tabelas ao mesmo tempo?

é possível?

Oi, 'cassianooliver' !

A resposta para sua pergunta é sim. É possivel. É a forma de consultarmos os relacionamentos entre as tabelas.

De maneira geral, fazemos isso usando JOINS

O INNER JOIN retorna somente os dados que existirem nas duas tabelas do relacionamento

O LEFT JOIN retorna os dados que existirem na tabela da esquerda do relacionamento

O RIGHT JOIN retorna os dados que existirem no lado direito do relacionamento.

O SELECT STRAIGHT_JOIN força o motor do MySQL ler o sql com join tal como foi escrito pelo programador. Sem a cláusula STRAIGHT_JOIN, o motor do MySQL escolhe o que para ele é a melhor forma de resolver a questão. O que nem sempre é verdade.

Leia mais sobre este assunto no capítulo 6, seção 6.4.1.1. Sintaxe JOIN do manual do MySQl versão 4.1 em português.

Convém que você estude mais sobre modelo relacional de bancos de dados e SQL. Um bom livro para tal é INTRODUCAO AO SISTEMA DE BANCO DE DADOS - DATE, C. J. ED. CAMPUS.

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, 'cassianooliver' !

A resposta para sua pergunta é sim. É possivel. É a forma de consultarmos os relacionamentos entre as tabelas.

De maneira geral, fazemos isso usando JOINS

O INNER JOIN retorna somente os dados que existirem nas duas tabelas do relacionamento

O LEFT JOIN retorna os dados que existirem na tabela da esquerda do relacionamento

O RIGHT JOIN retorna os dados que existirem no lado direito do relacionamento.

O SELECT STRAIGHT_JOIN força o motor do MySQL ler o sql com join tal como foi escrito pelo programador. Sem a cláusula STRAIGHT_JOIN, o motor do MySQL escolhe o que para ele é a melhor forma de resolver a questão. O que nem sempre é verdade.

Leia mais sobre este assunto no capítulo 6, seção 6.4.1.1. Sintaxe JOIN do manual do MySQl versão 4.1 em português.

Convém que você estude mais sobre modelo relacional de bancos de dados e SQL. Um bom livro para tal é INTRODUCAO AO SISTEMA DE BANCO DE DADOS - DATE, C. J. ED. CAMPUS.

Olá Dênis,

obrigado pela atenção..

bom, na verdade não há relação entre as tabelas...

sendo mais específico na dúvida..

To montando um sistema de tags...

aí quando o visitante clicar numa tag, quero pesquisá-la em várias tabelas, eventos, vídeos, fotos, etc....

seria isso...

acho que agora me expliquei melhor...

Link para o comentário
Compartilhar em outros sites

  • 0

So agora vi sua resposta, vou olhar...

to tentando fazer assim:

<?php
$tag = $_GET["tag"];
$sql = "SELECT coberturas.evento, eventos.evento, videos.evento FROM coberturas, eventos, videos WHERE 
coberturas.evento LIKE '%" . $tag . "%' OR eventos.evento LIKE '" . $tag . "' OR videos.evento LIKE '" . $tag . "'";
$busca = mysql_query($sql);
$total = mysql_num_rows($busca);

if($total == 0) {
    echo "<h2>Desculpe, nenhum registro foi localizado com os dados fornecidos!</h2>";
}

else {
    if($total == 1) {
        echo "<h2>$total registros localizados</h2>";
    }
    else {
        echo "<h2>Foram localizados $total registros</h2>";
    }
    echo $total;
}
?>
ta sempre retornando 0.. e tem registros nas tabelas com as palavras que pesquiso... ops... consegui!
SELECT * FROM coberturas, eventos, videos WHERE 
coberturas.evento LIKE '%" . $tag . "%' OR eventos.evento LIKE '" . $tag . "' OR videos.evento LIKE '" . $tag . "'"
agora complicou, como montar o resultado da busca... tipo, dividir os resultados encontrados nas coberturas, eventos e vídeos, é possível? tipo, se eu fizer isso:
$cobertura = $resultado["evento"];

num dá pra saber se é no campo evento da tabela, cobertura, eventos ou vídeos...

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

  • 0

bom, consegui aqui, mas foi meio trabalhoso...

<?php
$tag = $_GET["tag"];

$sql = "INSERT INTO tags (tag) VALUES ('$tag')";
$query = mysql_query($sql);

$sql_c = "SELECT id, evento FROM coberturas WHERE evento LIKE '%" . $tag . "%'";
$busca_c = mysql_query($sql_c);
$total_c = mysql_num_rows($busca_c);

$sql_e = "SELECT id, evento FROM eventos WHERE evento LIKE '%" . $tag . "%'";
$busca_e = mysql_query($sql_e);
$total_e = mysql_num_rows($busca_e);

$sql_v = "SELECT id, evento FROM videos WHERE evento LIKE '%" . $tag . "%'";
$busca_v = mysql_query($sql_v);
$total_v = mysql_num_rows($busca_v);

if($total_c == 0 && $total_e == 0 && $total_v == 0) {
    echo "<h2>Desculpe, nenhum registro encontrado para <u>" . $tag . "</u>!</h2>";
    exit;
}
while($resultado_c = mysql_fetch_array($busca_c)) {    
    $cid = $resultado_c["id"];
    $cobertura = $resultado_c["evento"];

    echo "<strong>Cobertura: </strong><a href=\"index.php?pagina=cobertura&cid=" . $cid . "\">" . $cobertura . "</a><br />";
}
while($resultado_e = mysql_fetch_array($busca_e)) {    
    $eid = $resultado_e["id"];
    $evento = $resultado_e["evento"];

    echo "<strong>Evento: </strong><a href=\"index.php?pagina=evento&eid=" . $eid . "\">" . $evento . "</a><br />";
}
while($resultado_v = mysql_fetch_array($busca_v)) {    
    $vid = $resultado_v["id"];
    $video = $resultado_v["evento"];

    echo "<strong>Vídeo: </strong><a href=\"index.php?pagina=video&vid=" . $vid . "\">" . $video . "</a><br />";
}
?>

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