Doubt in logic for table comparisons between plans - Timeout is giving

0

I have the following table on my site, and today it is static (not updatable by CMSs). It has more lines than this image, but I just took a piece to illustrate.

Today,inmydatabase,Ihavethese3plans(ACO,ACOFITandACOModular)registeredinatablecalled"system_plans". Each plan has A product registered in "product_product" and interconnected by a table called "product_platform". Within each product, there are modules that, in the image above, are shown aligned in the left column. These modules are registered in a table called "system_module" and interconnected in the product through a table called "module_model_product".

I need to mount this table of images by looking at the information in the database. I managed, but due to the high number of queries, in 80% of the time it gives TIMEOUT.

So, I think there's something wrong with the logic I built. I would like tips on how to proceed!

$divTabela = "";
$listaHead01 = "";
$listaHead02 = "";
$listaModulo = "";
$listaFoot = "";

/ * Traz os planos pra montar a tabela
$objPlano = new Plano();
$objPlano->plaAtivo = "S";
$objPlano->plaExcluido = "N";
$resultadoPlano = $objPlano->load(false, "plaValor DESC");

if(!empty($resultadoPlano)){

    // * Inicia os objetos
    $objPlanoProduto = new PlanoProduto();
    $objProdutoModulo = new ProdutoModulo();

    $objModulo = new Modulo();
    $objModulo->modAtivo = "S";
    $objModulo->modExcluido = "N";

    $arrayProdutoId = array();

    // * Loop de planos
    foreach($resultadoPlano as $plano){

        $valorPlano = (!empty($plano['plaValor'])) ? "A partir de<br><span>R$".number_format($plano['plaValor'],2,",",".")."</span> mensais<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small>" : "Consulte";

        // * Headings
        $listaHead01 .= "<th width=\"20%\">".$plano['plaTitulo']."</th>";
        $listaHead02 .= "<th>".$valorPlano."</th>";

        // * Footers
        $listaFoot .= "<td><a class=\"btn-arq\" href=\"/produto/".$plano['plaAlias']."\">Mais detalhes</a></td>";

        // * Precisamos saber agora qual ícone irá em cada TD
        // * Para isso, traremos primeiro o produto do plano $i
        // * Com o produto definido, podemos saber quais módulos cada produto tem disponível
        $objPlanoProduto->plaId = $plano['plaId'];
        $resultadoPlanoProduto = $objPlanoProduto->load();

        if(!empty($resultadoPlanoProduto)){
            $arrayProdutoId[] = $resultadoPlanoProduto[0]['proId'];
        }

    }

    // * Traz a lista de módulos
    $resultadoModulo = $objModulo->load();

    if(!empty($resultadoModulo)){

        foreach($resultadoModulo as $modulo){

            // * Inicia as variáveis
            $tdPlano = "";

            // * Tbody
            // * Pra cada plano, cria uma TD
            for($i = 0; $i < count($resultadoPlano); $i++){

                $iconeCheck = "";

                // * Agora, trazemos os módulos do produto
                $objProdutoModulo->proId = $arrayProdutoId[$i];
                $objProdutoModulo->modId = $modulo['modId'];
                $resultadoProdutoModulo = $objProdutoModulo->load(true);

                if(!empty($resultadoProdutoModulo)){

                    // * Verifica se o produto é modular
                    if($resultadoPlano[$i]['plaValor'] > 0){
                        $iconeCheck = "<i class=\"fa fa-check\"></i>";
                    }
                    else{
                        $iconeCheck = "<i data-toggle=\"tooltip\" title=\"Item opcional. Consulte adição.\" class=\"fa fa-question\"></i>";
                    }
                }

                // * Monta no template
                $tdPlano .= "<td>".$iconeCheck."</td>";

            }

            $listaModulo .= "
            <tr>
                <td>".$modulo['modTitulo']."</td>
                ".$tdPlano."
            </tr>";
        }

    }

    $divTabela = "
    <table class=\"tabelaPreco table table-bordered table-striped\">
        <thead>
            <tr>
                <th width=\"20%\" style=\"background:#f3f3f3\"></th>
                ".$listaHead01."
            </tr>
            <tr>
                <th style=\"background:#f3f3f3\"></th>
                ".$listaHead02."
            </tr>
        </thead>
        <tbody>
            ".$listaModulo."
        </tbody>
        <tfoot>
            <tr>
                <td></td>
                ".$listaFoot."
            </tr>
        </tfoot>
    </table>";
}
    
asked by anonymous 06.03.2018 / 18:16

0 answers