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

(Resolvido) Dúvida em consulta com muitos campos


Himairo

Pergunta

Tenho um formulário com os seguintes campos para busca de um relatório:

txtTitulo, txtAutor, listaOrientador(é um campo select que recebe um idOrientador como valor), listaArea(é um campo select que recebe um idArea como valor), anoRelat, semestre, estagio

Esses valores são recebidos do formulário, sendo que basta apenas um para a consulta ser feita.

Tenho uma tabela Relatorio, Usuario, Orientador, Area...

A tabela Relatorio possui os campos: Usuario_idUsuario, titulo, Orientador_idOrientador, Area_idArea, ano....

A dúvida é, no MySql, como fazer no SELECT para eu poder pesquisar na tabela Relatório um registro com as características passadas e fazer a ligação para saber os nomes de Orientador e Area que constam nas suas tabelas. E fazer o inverso, caso seja selecionado orientador ou area fazer a ligação com o relatório.

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

6 respostass a esta questão

Posts Recomendados

  • 0

Em primeiro lugar você tem que descobrir o que foi passado, isso você faz com isset pros imputs, só que o select dependendo do jeito que você fez o select, ele sempre vai estar setado, então você talvez terá que usar o != de alguma coisa para verificar se algo foi selecionado no select... a partir disso você monta a query e usa JOIN para catar os dados nas outras tabelas...

Link para o comentário
Compartilhar em outros sites

  • 0
Em primeiro lugar você tem que descobrir o que foi passado, isso você faz com isset pros imputs, só que o select dependendo do jeito que você fez o select, ele sempre vai estar setado, então você talvez terá que usar o != de alguma coisa para verificar se algo foi selecionado no select... a partir disso você monta a query e usa JOIN para catar os dados nas outras tabelas...

Valeu pela dica do select. Fiz os JOIN, funcionou para impressão dos resultados onde conseguiu-se pegar os valores "nomes" de outras tabelas, mas a consulta não foi bem sucessida pois independente do valor preenchido/selecionado retorna todos os relatórios registrados.

Veja o código a baixo:

if( ($titulo=="") && ($autor=="") && ($ano=="") && ($semestre=="") && ($tipoEstagio==""))
{
if( ($orientador!=-1) || ($area!=-1))
{

$resultado = ("SELECT r.idRelatorio, r.titulo, r.ano, r.semestre, r.tipoEstagio, o.nomeOrientador, a.nomeArea, u.nomeUsuario
FROM relatorio r
INNER JOIN orientador o ON (r.Orientador_idOrientador = o.idOrientador)
INNER JOIN area a ON (r.Area_idArea = a.idArea)
INNER JOIN usuario u ON (r.Usuario_idUsuario = u.idUsuario)
WHERE o.idOrientador LIKE '%{$orientador}%' OR a.idArea LIKE '%{$area}%' ORDER BY idRelatorio ") or die("ERRO NO COMANDO SQL");
}
}
else
{
$resultado = ("SELECT r.idRelatorio, r.titulo, r.ano, r.semestre, r.tipoEstagio, o.nomeOrientador, a.nomeArea, u.nomeUsuario
FROM relatorio r
INNER JOIN orientador o ON (r.Orientador_idOrientador = o.idOrientador)
INNER JOIN area a ON (r.Area_idArea = a.idArea)
INNER JOIN usuario u ON (r.Usuario_idUsuario = u.idUsuario)
WHERE r.titulo LIKE '%{$titulo}%' OR u.nomeUsuario LIKE '%{$autor}%' OR o.idOrientador LIKE '%{$orientador}%' OR a.idArea LIKE '%{$area}%' OR r.ano LIKE '%{$ano}%' OR r.semestre = '$semestre' OR r.tipoEstagio = '$tipoEstagio' ORDER BY idRelatorio ") or die("ERRO NO COMANDO SQL");
}

Coloquei os ifs para caso o usuário selecione apenas uma área ou um orientador. O que devo fazer??

Link para o comentário
Compartilhar em outros sites

  • 0

Acontece que quando você bota, por exemplo:

AND/OR '%{$area}%'

Se $area estiver vazia automaticamente isso vai se transformar em:

AND/OR '%%'

O que vai fazer com que tudo venha... você tem que armar a sua query de outra maneira, só colando o que estiver diferente de vazio...

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui resolver a consulta! Valeu pelas dicas!

$resultado = ("SELECT DISTINCT r.idRelatorio, r.titulo, r.ano, r.semestre, r.tipoEstagio, o.nomeOrientador, a.nomeArea, u.nomeUsuario
FROM relatorio r
INNER JOIN orientador o ON (r.Orientador_idOrientador = o.idOrientador)
INNER JOIN area a ON (r.Area_idArea = a.idArea)
INNER JOIN usuario u ON (r.Usuario_idUsuario = u.idUsuario)
");
$Filtro = "";
if ($orientador!="")
{
$Filtro = $Filtro."o.idOrientador LIKE '{$orientador}%'";
}

if ($area!="" )
{
if ($Filtro != "")
{
$Filtro = $Filtro. " OR ";
}

$Filtro = $Filtro." a.idArea LIKE '{$area}%'" ;
}

if ($titulo!="")
{
if ($Filtro != "")
{
$Filtro = $Filtro. " OR ";
}

$Filtro = $Filtro." r.titulo LIKE '%{$titulo}%'";
}


if ($autor!="")
{
if ($Filtro != "")
{
$Filtro = $Filtro. " OR ";
}

$Filtro = $Filtro." u.nomeUsuario LIKE '%{$autor}%'";

}

if ($ano!="")
{
if ($Filtro != "")
{
$Filtro = $Filtro. " OR ";
}

$Filtro = $Filtro." r.ano LIKE '%{$ano}%'";

}


if ($semestre!="")
{
if ($Filtro != "")
{
$Filtro = $Filtro. " OR ";
}

$Filtro = $Filtro." r.semestre = '$semestre'";

}

if ($tipoEstagio!="")
{
if ($Filtro != "")
{
$Filtro = $Filtro. " OR ";
}

$Filtro = $Filtro." r.tipoEstagio = '$tipoEstagio'";

}
$resultado .= 'WHERE '.$Filtro.' ORDER BY idRelatorio';

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