Dynamic table in PHP

Asked

Viewed 297 times

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:

inserir a descrição da imagem aqui

I needed to show her off like this:

inserir a descrição da imagem aqui

--------- 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.

  • 2

    The SQL code you are using is definitely incorrect. Edit your question and put the code there, it will be much easier to help.

  • Dear glue here your query, but I suspect it lacks a GROUP BY student there.

  • 2

    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.

  • The query’s were entered as sun cited, but remember that even the table header is dynamic.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.