Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

valdezweb

Otimização de relatório Mysql + PHP para excel

Recommended Posts

Não sou de publicar muitas dúvidas, geralmente vasculho no google e resolvo minha "pendengas" pesquisando, mas sinceramente, travei nesse problema.

 

Montamos uma estrutura de extração de dados para o Excel para "popular" um programa que produz relatórios estatísticos, mas a extração está demorando muito, mudamos as querry de consultas, mas infelizmente o desempenho melhorou pouca coisa.

 

Vou tentar explicar.

 

No Excel são mostrados os seguintes dados

 

Cabeçalho >>> Lista todas as perguntas de uma pesquisa de opinião.

protocolo | Pergunta 01 | Pergunta 02 | Pergunta 03 |

 

Dados >>> extraímos todas as respostas dos usuários que preencheram o formulário.

protocolo | Pergunta 01 | Pergunta 02 | Pergunta 03 |

001 resp001 resp001 esp001

002 resp002 resp002 esp002

003 resp003 resp003 esp003

 

Estamos extraindo da seguinte forma, vou resumir.

 

$string .= ".<table>."

$string .= ".<tr>."

// início primeiro While para criar o cabeçalho.

// mysql_query para listar as perguntas.

while ($perguntas = mysql_fetch_array($rs_pergunta)) {

$string .= "<th>".$perguntas['pergunta']."</th>";
}

// fim cabeçalho

 

// início dos dados de cada protocolo

// segundo while somente para pegar o protocolo
$i = 1;
while ($row = mysql_fetch_row($protocolo)) {
$string .= "<tr>";

$string .= "<td>". $i."</td>";
$string .= "<td>". $row[id_protocolo]."</td>";

//RESPOSTA consulta para gerar o restante dos dados de cada protocolo.
$query_resposta = mysql_query("SELECT
tb_pergunta.num_ord_pergunta as 'num_ord_pergunta',
tb_quest_perg_resp.id_questionario as 'id_questionario',
tb_quest_perg_resp.id_pergunta as 'id_pergunta',
tb_quest_perg_resp.resposta as 'resposta'
FROM
tb_pesquisa
LEFT JOIN tb_pergunta ON tb_pesquisa.id_pesquisa = tb_pergunta.id_pesquisa
LEFT JOIN tb_quest_perg_resp ON tb_pergunta.id_pergunta = tb_quest_perg_resp.id_pergunta
WHERE
tb_quest_perg_resp.id_questionario = ".$row[id_protocolo]."
ORDER BY
tb_pergunta.num_ord_pergunta");

while ($res_resposta = mysql_fetch_array($query_resposta)) {
$string .= "<td>".$res_resposta['resposta']." </td>";
}

$string .= "</tr>";
$i++;
}

$string .= "</table>";

 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Essa estrutura está fazendo o que precisamos, mas demora muito para extrai.

Como otimizar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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