1
I am developing a system for call tracking and teachers need a report where it will be possible to view the students of the class filtered by discipline, where it will be displayed if the student was present or missed those days in that discipline.
So far so good, the problem is time to assemble the table.
I need to assemble a table where the <th></th>
tables are filled with some dates that are in Mysql. So far so good, the problem is when I will create the table rows by organizing the status the frequency with the respective dates, and all in one row.
Today I can display it like this:
I needed to show her off like this:
--------- EDIT
// Returns student frequency in Mysql public Function dataset
frequencia() {
$this->db->select('aluno_frequencia.af_InquilinoId,
aluno_frequencia.af_AnoLetivoId,
aluno_frequencia.af_PeriodoId,
aluno_frequencia.af_TurmaId,
aluno_frequencia.af_DisciplinaId,
aluno_frequencia.af_PessoaId,
aluno_frequencia.af_AlunoId,
anoletivo.anoletivo_Nome,
periodo.periodo_Nome,
turma.turma_Nome,
disciplina.disciplina_Nome,
apessoa.pessoa_Nome,
aluno_frequencia.af_data AS af_datahora,
DATE(aluno_frequencia.af_data) AS af_data,
aluno_frequencia.af_status');
$this->db->from('aluno_frequencia');
$this->db->join('aluno', 'aluno.aluno_id = aluno_frequencia.af_AlunoId');
$this->db->join('pessoa AS apessoa', 'apessoa.pessoa_id = aluno.aluno_pessoa_id AND apessoa.pessoa_inquilino_id = aluno_frequencia.af_InquilinoId');
$this->db->join('anoletivo', 'anoletivo.anoletivo_id = aluno_frequencia.af_AnoLetivoId AND anoletivo.anoletivo_inquilino_id = aluno_frequencia.af_InquilinoId');
$this->db->join('periodo', 'periodo.periodo_inquilino_id = aluno_frequencia.af_InquilinoId AND periodo.periodo_id = aluno_frequencia.af_PeriodoId');
$this->db->join('turma', 'turma.turma_inquilino_id = aluno_frequencia.af_InquilinoId AND turma.turma_id = aluno_frequencia.af_TurmaId');
$this->db->join('disciplina', 'disciplina.disciplina_inquilino_id = aluno_frequencia.af_InquilinoId AND disciplina.disciplina_id = aluno_frequencia.af_DisciplinaId');
$this->db->where('aluno_frequencia.af_InquilinoId', '2');
$this->db->where('DATE(aluno_frequencia.af_data)', '2019-02-20');
$this->db->where('aluno_frequencia.af_TurmaId', '25');
$this->db->where('aluno_frequencia.af_DisciplinaId', '22');
$this->db->order_by('aluno_frequencia.af_AlunoId', 'ASC');
$query = $this->db->get();
return $query->result();
$this->db->close();
}
// Returns the frequency dates
public function dataFrequencia()
{
$this->db->select('DATE(aluno_frequencia.af_data) AS af_data');
$this->db->from('aluno_frequencia');
$this->db->join('aluno', 'aluno.aluno_id = aluno_frequencia.af_AlunoId');
$this->db->join('pessoa AS apessoa', 'apessoa.pessoa_id = aluno.aluno_pessoa_id AND apessoa.pessoa_inquilino_id = aluno_frequencia.af_InquilinoId');
$this->db->join('anoletivo', 'anoletivo.anoletivo_id = aluno_frequencia.af_AnoLetivoId AND anoletivo.anoletivo_inquilino_id = aluno_frequencia.af_InquilinoId');
$this->db->join('periodo', 'periodo.periodo_inquilino_id = aluno_frequencia.af_InquilinoId AND periodo.periodo_id = aluno_frequencia.af_PeriodoId');
$this->db->join('turma', 'turma.turma_inquilino_id = aluno_frequencia.af_InquilinoId AND turma.turma_id = aluno_frequencia.af_TurmaId');
$this->db->join('disciplina', 'disciplina.disciplina_inquilino_id = aluno_frequencia.af_InquilinoId AND disciplina.disciplina_id = aluno_frequencia.af_DisciplinaId');
$this->db->where('aluno_frequencia.af_InquilinoId', '2');
$this->db->where('DATE(aluno_frequencia.af_data)', '2019-02-20');
$this->db->where('aluno_frequencia.af_TurmaId', '25');
$this->db->where('aluno_frequencia.af_DisciplinaId', '22');
$this->db->group_by('aluno_frequencia.af_AlunoId');
$this->db->order_by('aluno_frequencia.af_AlunoId', 'ASC');
$query = $this->db->get();
return $query->result();
$this->db->close();
}
// Return the students of the class public Function alunoTurma() {
$this->db->select('aluno.aluno_id,
aluno.aluno_pessoa_id,
apessoa.pessoa_Nome');
$this->db->from('aluno');
$this->db->join('pessoa AS apessoa', 'apessoa.pessoa_id = aluno.aluno_pessoa_id');
$this->db->join('turma_aluno', 'turma_aluno.taluno_Aluno_id = aluno.aluno_id');
$this->db->join('turma_periodo', ' turma_periodo.tp_id = turma_aluno.taluno_TurmaPeriodo_id AND turma_periodo.tp_anoletivo_id = aluno.aluno_anoletivo_id AND turma_periodo.tp_periodo_id = aluno.aluno_periodo_id');
$this->db->join('turma', 'turma.turma_id = turma_periodo.tp_turma_id AND turma.turma_inquilino_id = apessoa.pessoa_inquilino_id');
$this->db->where('apessoa.pessoa_inquilino_id', '2');
$this->db->where('turma.turma_id', '25');
$this->db->order_by('apessoa.pessoa_Nome', 'ASC');
$query = $this->db->get();
return $query->result();
$this->db->close();
}
// I am trying to group the information in an array first to then mount the table fully dynamin
$tabela['CABECALHO'] = array();
$tabela['LINHA'] = array();
$tabela['LINHA']['FREQUENCIA'] = array();
foreach($dataFrequencia as $DataFrequencia)
{
array_push($tabela['CABECALHO'], $DataFrequencia->af_data);
}
foreach($alunoTurma as $AlunoTurma)
{
foreach($frequencia as $Frequencia)
{
if($AlunoTurma->aluno_id == $Frequencia->af_AlunoId)
{
$linha = array('DATA' => $DataFrequencia->af_data, 'ALUNO' => $AlunoTurma->pessoa_Nome );
array_push($tabela['LINHA'], $linha);
}
}
}
I even managed to group the information the way I want, but it is direct in mysql and I found it a little laborious, SQL gets giant and I think it ends up damaging the performance follows the SQL that I built....
SELECT
aluno.aluno_id,
apessoa.pessoa_Nome,
(SELECT GROUP_CONCAT(CONCAT(aluno_frequencia.af_data, ' ', aluno_frequencia.af_status)) AS status FROM aluno_frequencia WHERE aluno_frequencia.af_AlunoId = aluno.aluno_id AND aluno_frequencia.af_TurmaId = 25 AND aluno_frequencia.af_DisciplinaId = 22 AND DATE(aluno_frequencia.af_data) = '2019-02-20') AS '20/02'
FROM aluno
JOIN pessoa AS apessoa ON apessoa.pessoa_id = aluno.aluno_pessoa_id
WHERE aluno.aluno_id IN (SELECT vwturmaaluno.aluno_id FROM vwturmaaluno WHERE vwturmaaluno.turma_id = 25)
AND
aluno.aluno_id IN (SELECT vwdisciplinaaluno.aluno_id FROM vwdisciplinaaluno WHERE vwdisciplinaaluno.disciplina_id = 22)
Hello @Danillo Dars, add the question to the table structure and also your SQL code so we can assist in the solution. Without this we will only be able to assume solutions on top of assumed tables.
– 8biT
The SQL code you are using is definitely incorrect. Edit your question and put the code there, it will be much easier to help.
– João Martins
Dear glue here your query, but I suspect it lacks a GROUP BY student there.
– Gabriel Selga Vital
Probably the student is giving JOIN of the disciplines and therefore there are several "repeated" students. The student has N disciplines. But without the query it is difficult.
– Neuber Oliveira
The query’s were entered as sun cited, but remember that even the table header is dynamic.
– Danillo Dars