Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!!!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...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.**
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) {