Ir para conteúdo
felipotrindade

Auxilio com SELECT

Recommended Posts

Galera boa noite! Preciso de uma ajuda de vocês com relação a um comando SQL no MySQL e depois no PHP.

Tenho as seguintes tabelas e as suas colunas:

Pessoa

 ID

 Nome

 

Tratamento

 ID

 DESCRICAO

 

ROTINAS

 ID

 ID_PESSOA

 ID_TRATAMENTO

 

Por exemplo, quando eu insiro os registros nessas tabelas, onde, a rotina manterá o relacionamento entre pessoa e tratamento conforme abaixo:

ROTINAS

ID = 1 ID_PESSOA = 1 ID_TRATAMENTO = 1

ID = 2 ID_PESSOA = 1 ID_TRATAMENTO = 2

 

Supondo que, a pessoa se chame JOÃO, ou seja, ele aparece duas vezes na tabela rotinas conforme acima e, o tratamento 1 seja medição do nível de ph e o tratamento 2 seja temperatura da água. Usando o inner join fica assim:

PESSOA TRATAMENTO.DESCRICAO

JOÃO      MEDIÇÃO PH

JOÃO      TEMPERATURA

 

mysql> select pessoa.nome, tratamento.descricao from rotinas inner join pessoa on rotinas.id_pessoa=pessoa.id inner join tratamento on rotinas.id_tratamento=tratamento.id;

 

Até ai tudo bem!!! Porém, ao invés de mostrar o comando select com os resultados linhas por linha, gostaria de agrupar pelo nome da pessoa e mostrar os tratamentos, no caso a descrição e colunas e não linha a linha repetindo o nome da pessoa várias vezes.

 

Não sei se deu para entender! Peço desculpas por tentar explicar dessa forma rs.....

 

Obrigado se puderem me ajudar!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá felipo, tudo bem? Espero que sim!

 

Basta fazer as consultas separadas se necessário utilizar while em ambas para chamar todos as pessoas.

$selectPessoas = "busca as pessoas no navegador";

while($pessoas = $selectPessoas) {

 echo "O(a) {$pessoas['nome']} faz os seguintes tratamentos:";

 $selectTratamento = "busca os tratamentos desta pessoa utilizando WHERE no ID_PESSOA";

 while($tratamento = $selectTratamento) {

  echo "{$tratamento['nome']} e";

 }

}

Este foi só um exemplo, deve modificar para se adaptar ao desejado.

 

Abraços, Wictor Pamplona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Wictor, obrigado pela ajuda, porém, ainda não consegui fazer rs...

 

Gostaria muito de apresentar o resultado por colunas ao invés de linhas e agrupados pelo nome da pessoa. 

Para melhor entender, esse seria um sistema de rotinas para aquários onde, um funcionário, pessoa, realiza várias rotinas de verificações em diversos aquários.

 

Estou montando as tabelas abaixo para testes:

 

Pessoas, Tratamentos e Rotinas. Quando executo o select: mysql> select pessoa.nome, tratamentos.tratamento from rotinas inner join pessoa on rotinas.id_pessoa=pessoa.id inner join tratamentos on rotinas.id_tratamentos=tratamentos.id;
 

Ele me retorna assim:

+--------+-------------+-------------+
| nome   | tratamento
+--------+-------------+-------------+
| felipo | nivel ph
| felipo | temperatura
+--------+-------------+-------------+

 

Note que deu certo, porém ficou linha a linha, ou seja, repetiu meu nome em duas linhas, pois, na tabela de rotinas há dois registros inseridos. Sendo assim, gostaria que a exibição fosse mostrada apenas uma vez o meu nome e os testes em colunas.

 

Por exemplo:

nome  tratamento, tratamento

felipo | nivel ph | temperatura

 

Não sei se deu para entender, pq terei várias rotinas realizadas em diversos aquários e o relatório deverá sair o nome da pessoa, o nome do aquário e os testes que foram realizados, porém, em colunas e não linhas rs...

 

Obrigado...

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue exemplo de como fazer:

 

<table>

 <?php rotina(); ?>

</table>

 


$pacientes = $db->query("PUXA OS PACIENTES");

 while($paciente = $pacientes->mysqli-query()) {

  $idPaciente = $paciente['id'];

  echo "<td><tr>{$paciente['nome']}</tr>";

  $rotinas = $db->query("PUXA AS ROTINAS CONFORME o ID WHERE id='{$idPaciente}'");

  while($rotina = $rotinas->fetch_array()) {

   $idTratamento = $rotina['tratamentoId'];

   $tratamento = $db->query("PUXA OS TRATAMENTOS CONFORME A ROTINA WHERE id='{$idTratamento'}")->fetch_array();

   echo "<tr>{$tratamento['nome']}</tr>";

  }

  echo"</td>";

 }

 

Deste modo a função irá chamar todos os pacientes e as rotinas em que o paciente se encontra, e assim encontrando o seu tratamento.

O primeiro WHILE que chama os pacientes, irá exibir dentro do seu registro apenas o seu nome na primeira coluna.

O segundo while irá exibir os tratamentos em quantas colunas tiver.

 

Abraços, Wictor Pamplona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por eduardohaag
      Boa noite pessoal,
      Esbarrei em um novo problema com consultas no meu sistema.
       
      Tenho um formulário no sistema que deverá apresentar todos os materiais utilizados em uma determinada Venda e seus respectivos estoques obtidos através da soma das entradas e saidas do estoque.
      Para isso devo buscar os dados em 3 tabelas do banco de dados sendo elas VendasProdutos, Composicao,  Materiais e Estoque

       
      Eis que surge meu problema, como posso ter vários produtos na venda e alguns produtos usam os mesmos materiais, a consulta está retornando com os materiais duplicados, quando o que eu gostaria era que somasse de acordo com cada material.
       
      A query que estou usando para teste no acesso é a seguinte:
      SELECT Composicao.IdMaterial, materiais.descricao, Sum(Estoque.Quantidade) AS Estoque, [VendasProdutos]![Quantidade]*[Composicao]![Quantidade] AS TotalUtilizado FROM (VendasProdutos LEFT JOIN (materiais RIGHT JOIN Composicao ON materiais.ID = Composicao.IdMaterial) ON VendasProdutos.IdProduto = Composicao.IdProduto) LEFT JOIN Estoque ON materiais.ID = Estoque.IdMaterial GROUP BY Composicao.IdMaterial, materiais.descricao, [VendasProdutos]![Quantidade]*[Composicao]![Quantidade], VendasProdutos.IdVenda HAVING (((VendasProdutos.IdVenda)=1));  
      A consulta está retornando os dados dessa forma:

       
      E eu gostaria de que agrupasse por ex:
       
      ID                Descricao                Estoque               TotalUtilizado
      1                 Capa Agenda             34                             10
      2                 Miolo Agenda            27                              5
       
      Alguem Sabe como posso fazer isso?
      Desulpem pelo post gigante, mas não sabia como explicar melhor.
    • Por Félix Henrique
      Boa noite nobres amigos.

      Estou com um problema em meu sisteminha, e não estou sabendo como resolver.

      Segue o link do sistema em funcionamento:
       
      http://locarweb.com.br/cotacao/

      O que eu queria?
      Que ao selecionar um tipo de sementes no 1º select, ele me desse as variedades de sementes disponíveis para esse tipo no 2º select.
      Seria estilo aqueles scripts de Estado/Cidade.

      Mas o que acontece?

      O problema maior ocorre quando vou duplicar a linha de pedidos, duplicando os selects acima.

      O erro acontece que você seleciona um tipo, mas fica disponível todas as variedades no próximo select.

      Seria tipo:
      TIPO ------------- > VARIEDADE
      Brachiara ------ > Decumbens
      Brachiara ------ > Brizantha

      Panicum ------ > Tanzânia
       
       
      Alguém poderia me ajudar a entender como faço para resolver esse problema?
       
    • Por Wictor Pamplona
      Olá, me chamo Wictor Pamplona e estou enfrentando um pequeno problema com HTML. Gostaria de pedir à ajuda de vocês para resolver essa questão.
       
      Veja, eu tenho um formulário aonde possuí vários SELECT, eu já produzi um código jQuery que faz a tradução deste select para HTML e altera o select ele estando oculto para o usuário, isto já está funcional. Porém, recentemente me surgiu a necessidade de inserir código HTML nestes options, tanto para ser imprimido como texto, como ser lido como html dentro da página.
      Sei que a dúvida parecer ser de javascript, porém não é (creio que possa ser resolvido com HTML).
       
      Vejamos, eu colocando o option assim:

      <option value=""><b>1-</b> Linha 1
      Eu queria que fosse traduzido para o select exatamente como foi escrito, sendo uma variável de texto não aplicando a estilização HTML: <b>1- Linha 1</b>.
      Porém, ainda assim apresenta só o texto sem o html, retornando no select apenas: 1- LInha 1, não imprimindo o html em texto.
    • Por mr22robot
      Estou com uma dúvida. É possível determinar um select a partir de uma escolha?
      Ex. 
      SELECT CASE WHEN a < b THEN select * from tabela1 WHEN d < e THEN select * form tabela2 END FROM tabela; Algo parecido. Se uma condição for atendida select1 , se outra condição for atendida: select2.
      O que acontece: estou com um relatorio que preciso criar no winthor e não consigo melhorar isso. Tenho de fazer três relatorios como solução. Se eu consigo implantar isso, eu faria somente um relatorio. 
      Tipo se marcar um campo, sai um relatorio. Se marcar outro, saí outro relatorio.
    • Por GabrielB3r
      Bom dia,
      estou tentando criar um sistema de empréstimo e devolução de documentos.
      Funciona da seguinte forma:
      A pessoa tem o opção de cadastrar novos documentos,os quais são inseridos da tabela "dossie_cadastrado", e ela pode cadastrar o empréstimo e a devolução do mesmo que ficam salvos na tabela "dossie_emprestimo".
      A parte de cadastro e empréstimo consegui fazer funcionar, meu problema é na hora de cadastrar a devolução. Preciso inserir a data atual no último cadastro de um determinado dossie na tabela "dossie_emprestimo".
       
      Tenho o seguinte código:
      if(isset($_POST["cod_cad"])){         $cod_cad = $_POST["cod_cad"];         }          if(isset($_GET["cod_cad"])){         $cod_cad = $_GET["cod_cad"];     } $cod_cad = strip_tags($_POST['cod_cad']); $select_upd= mysqli_query($conexao_bd,"SELECT id_emp, data_emp from dossie_emprestimo where cod_cad='$cod_cad' ORDER BY data_emp desc limit 1") ; $sql_update="UPDATE dossie_emprestimo SET data_dev=CURDATE() WHERE id_emp='$id_emp'"; mysqli_query($conexao_bd, $sql_update);  
      quando eu rodo esse código separado no phpmyadmin, funciona normalmente, mas quando coloco no meu código ele não encontra o id_emp.
      id_emp - id de empréstimo, chave primaria com auto incremento.
      data_emp - data que foi realizado o empréstimo.
      cod_cad - código de cadastro, é o código que esta relacionado a tabela de cadastro, é o id do documento. ex: toda vez que o documento "20" for emprestado esse código sera "20".
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.