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

MONTAR UM SELECT DE VARIAS TABELAS RELACIONADAS


mulequim

Pergunta

Olá pessoal estou com o seguinte problema, já venho tentando a mais de um mês e venho pedir a juda de vocês. Por Favor.

Tenho duas tabelas no banco de dados que preciso consultar: tb_militar e tb_especialidade.

Montei um formulário para edição de dados da pessoa com o campo <SELECT> e gostaria de povoar este <SELECT> com esses dados e a especilidade da pessoa já aparecer selecionada no <SELECT>.

já consigo resgatar todos os dados dos campos de texto somente o <SELECT> que esta me dando este trabalho.

O campo chave secundária na tb_militar é ml_fkgraduaca e o campo primário da tb_especialidade é es_codigo. Veja como montei o <SELECT> ele vem com a especilidade da pessoa repetida varias vezes, quando utilizo DISTINCT OU GROUP BY, ainda ficam repetindo a especialidade mas menos vezes que na primeira situação. VEja o código:

<select name="especialidade" id="especialidade">
                        <option>Especialidade*</option>
                         <?php
                        $combo2 = mysql_query("SELECT  * FROM tb_militar 
INNER JOIN tb_graduacao ON tb_militar.ml_fkgraduacao = tb_graduacao.gr_codigo 
INNER JOIN tb_perfil ON tb_militar.ml_fkperfil =  tb_perfil.pf_codigo 
WHERE tb_militar.ml_saram='".$saram."'");                    
                       while($prod2 = mysql_fetch_array($combo2)) { ?>
                        <option value="<?php echo $linha['es_codigo'] ?>" selected><?php echo $linha['es_nome'] ?></option>
                        <?php }                
                        ?>
                    </select>

Desse modo acima somente aparece a especialidade da pessoa.

Se eu retirar a clausúla WHERE aparece a especilidade repetida vária vezes..

Conto com a ajuda de vocês.

Editado por Denis Courcy
colocar codigo entre codes
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Ok. Agora que você me deu mais informações já posso te ajudar.

Não conheço PHP Neste fórum me limito a responder somente sobre MySQL.

Sobre o select

1) Quando você escreve

SELECT * FROM
você tem consciência que está trazendo todos os campos de todas as tabela relacionadas?. Sugiro que você especifique somente os campos que você deseja exibir.

2) Modifique seu select para

SELECT STRAIGHT_JOIN <lista de campos> FROM tb_militar m
INNER JOIN tb_graduacao g ON g.gr_codigo = m.ml_fkgraduacao
INNER JOIN tb_perfil p ON p.pf_codigo = m.ml_fkperfil
Link para o comentário
Compartilhar em outros sites

  • 0

Ok. Agora que você me deu mais informações já posso te ajudar.

Não conheço PHP Neste fórum me limito a responder somente sobre MySQL.

Sobre o select

1) Quando você escreve

SELECT * FROM
você tem consciência que está trazendo todos os campos de todas as tabela relacionadas?. Sugiro que você especifique somente os campos que você deseja exibir.

2) Modifique seu select para

SELECT STRAIGHT_JOIN <lista de campos> FROM tb_militar m
INNER JOIN tb_graduacao g ON g.gr_codigo = m.ml_fkgraduacao
INNER JOIN tb_perfil p ON p.pf_codigo = m.ml_fkperfil

Valeu Amigo mais ainda não resolveu. Deixa eu explicar o que esta acontencendo e vou colacar o código completo da página onde coloquei o formulário para editar os dados dos usuarios.

Quando eu utilizo o codigo que voce me enciou aparece repetido várias vezes o mesmo dados no <option> do <select> e quando eu coloco somente SELECT * FROM <o nome da tabela> aparece do mesmo jeito. eu tenho outro <select> no final da página da tabela perfil e esta funcionando quando coloco SELECT * FROM tb_perfil.

Estou te dando muita dor de cabeça, mas obrigado pela ajuda...já tem bastante tempo que eu venho estudando sozinho mas não estou conseguindo. Veja o codigo abaixo da pagina completa.

<?php

include 'funcaoadmin.php';

include 'config.php';

?>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<link type="text/css" href="css/topo.css" rel="stylesheet"/>

<link type="text/css" href="css/conteudo.css" rel="stylesheet"/>

<link type="text/css" href="css/rodape.css" rel="stylesheet"/>

<link type="text/css" href="css/estilo.css" rel="stylesheet" />

<script src="css/funcoes.js" type="text/javascript"></script>

<title>Escala 1.0</title>

</head>

<body>

<div id="topo">

</div>

<div id="menu">

<ul class="menu">

<li><a href="#">HOME</a></li>

<li><a href="#">AGENDA</a></li>

<li><a href="#">USU&Aacute;RIO</a>

<ul>

<li><a href="#">Novo</a></li>

<li><a href="filtro_admin.php">Filtrar</a></li>

</ul>

</li>

<li><a href="#">CONTATO</a></li>

<li><a href="?acao=sair">SAIR</a></li>

</ul>

</div>

<div id="conteudo">

<h1> Sistema de Escala dos Aeronavegantes do 6&ordm; ETA</h1>

<hr />

<?php

$saram = $_GET['acao'];

$sql = "SELECT * FROM tb_militar INNER JOIN tb_graduacao ON tb_militar.ml_fkgraduacao = tb_graduacao.gr_codigo \r

INNER JOIN tb_perfil ON tb_militar.ml_fkperfil = tb_perfil.pf_codigo\r

INNER JOIN tb_especialidade ON tb_militar.ml_fkespecialidade = tb_especialidade.es_codigo\r

WHERE tb_militar.ml_saram='".$saram."'";

$result = mysql_query($sql) or die (mysql_error());

while ($linha = mysql_fetch_assoc($result)){

?>

<form method="post" alig="center" action="script_editar.php" onsubmit="return Validar();">

<table width="650px" align="center">

<tr>

<td colspan="1" class="celulatitulo">*Saram:</td>

<td colspan="3"><input name="saram" type="text" size="8" onKeyPress="return SomenteNumero(event);" id="saram" maxlength="7" value="<?php echo $linha['ml_saram']; ?>"></td>

</tr>

<tr>

<td colspan="1"class="celulatitulo">*Nome:</td>

<td colspan="3"><input name="nome" type="text" size="65" id="nome" value="<?php echo $linha['ml_nome']; ?>"></td>

</tr>

<tr>

<td colspan="1"class="celulatitulo">*N.Guerra:</td>

<td colspan="3"><input name="nguerra" type="text" size="20" id="nguerra" value="<?php echo $linha['ml_nguerra']; ?>"></td>

</tr>

<tr>

<td colspan="1"class="celulatitulo">*Grad./Esp.:</td>

<td colspan="1">

<select name="fkgraduacao" id="fkgraduacao">

<?php

$sqlComboGrad = "SELECT STRAIGHT_JOIN ml_fkgraduacao FROM tb_militar m \r

INNER JOIN tb_graduacao g ON g.gr_codigo = m.ml_fkgraduacao\r

INNER JOIN tb_perfil p ON p.pf_codigo = m.ml_fkperfil";

$ComboGrad = mysql_query($sqlComboGrad );

while($prod = mysql_fetch_array($ComboGrad)) { ?>

<option value="<?php echo $linha['gr_codigo'] ?>"> <?php echo $linha['gr_nome'] ?>

<?php } ?>

</select>

-

<select name="especialidade" id="especialidade">

<?php

$sqlComboEspec = "SELECT STRAIGHT_JOIN ml_fkespecialidade FROM tb_militar m \r

INNER JOIN tb_graduacao g ON g.gr_codigo = m.ml_fkgraduacao\r

INNER JOIN tb_perfil p ON p.pf_codigo = m.ml_fkperfil";

$combo2 = mysql_query($sqlComboEspec);

while($prod2 = mysql_fetch_array($combo2)) { ?>

<option value="<?php echo $linha['es_codigo'] ?>" selected><?php echo $linha['es_nome'] ?></option>

<?php }

?>

</select>

</td>

<td colspan="1"class="celulatitulo">*Antig. Relativa:</td>

<td colspan="1"><input name="antiguidade" type="text" size="8" id="antiguidade" value="<?php echo $linha['ml_antiguidade']; ?>"></td>

</tr>

<tr>

<td class="celulatitulo" colspan="4">Telefones:</td>

</tr>

<tr >

<td class="celulatitulo">Fixo:<input name="ffix" type="text" size="10" onKeyPress="return SomenteNumero(event);" id="ffix" maxlength="8" value="<?php echo $linha['ml_ffix']; ?>"></td>

<td class="celulatitulo">Trabalho:<input name="ftra" type="text" size="10" onKeyPress="return SomenteNumero(event);" id="ftra" maxlength="8" value="<?php echo $linha['ml_ftra']; ?>"></td>

<td class="celulatitulo">*Celular:<input name="fcel" type="text" size="10" onKeyPress="return SomenteNumero(event);" id="fcel" maxlength="8" value="<?php echo $linha['ml_fcel']; ?>"></td>

<td class="celulatitulo">*Outro:<input name="fout" type="text" size="10" onKeyPress="return SomenteNumero(event);" id="fout" maxlength="8" value="<?php echo $linha['ml_fout']; ?>"></td>

</tr>

<tr>

<td colspan="1" class="celulatitulo">E-mail:</td>

<td colspan="3"><input name="email" size="70" type="text" id="email" value="<?php echo $linha['ml_email']; ?>"></td>

</tr>

<tr>

<td colspan="1"class="celulatitulo">*Senha:</td>

<td colspan="1"><input name="senha" size="20" type="password" id="senha" maxlength="8" value="<?php echo $linha['ml_senha']; ?>"></td>

<td colspan="1"class="celulatitulo">*Perfil:</td>

<td colspan="1">

<!--<input name="fkgraduacao" type="text" size="3" id="fkgraduacao">-->

<select name="fkperfil" id="fkperfil">

<option>Perfil*</option>

<?php

$combo = mysql_query("SELECT * FROM tb_perfil");

while($prod = mysql_fetch_array($combo)) { ?>

<option value="<?php echo $prod['pf_codigo'] ?>"><?php echo $prod['pf_nome'] ?></option>

<?php }

?>

</select>

</td>

</tr>

<tr>

<td colspan="4"class="celulatitulo">*Campos de preenchimento Obrigat&oacute;rio!</td>

</tr>

<tr>

<td colspan="1"align="center"></td>

<td colspan="2"align="center"><input type="submit" value="Salvar" id="salvar"></td>

<td colspan="1"align="center"></td>

</tr>

</table>

</form>

<?php }

?>

</div>

<div id="rodape">

<h3>© Copyright - 3º Sgt. SIN MIGUEL</h3><br/>

<h4>Todos Direitos Reservados.</h4>

</div>

</body>

</html>

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