Ir para conteúdo

Arquivado

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

montano

[Resolvido] case dentro de Function ou + Functions

Recommended Posts

boa tarde,

 

Pessoal estou com uma duvida de para onde vou levar o desenvolvimento de uma classe:

Tenho que fazer 3 SELECT count, pegar o valor retornado de cada um e somar a um valor.

 

estou em duvida de qual a maneira é a mais rapida:

1ª Modo

function X ($case){
switch ($case) {
case: 1   
//FAÇO O PRIMEIRO SELECT COUNT E SOMO O VALOR
break;
case: 2   
//FAÇO O SEGUNDO SELECT COUNT E SOMO O VALOR
break;
case: 3   
//FAÇO O TERCEIRO SELECT COUNT E SOMO O VALOR
break;
}
}

2ª modo

function X1(){
//FAÇO PRIMEIRO SELECT
}
function X2(){
//FAÇO SEGUNDO SELECT
}
functoin X3(){
//FAÇO TERCEIRO SELECT
}

Gostaria de saber qual o jeito que me retornaria mais rapido.

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu preciso fazer na verda 3 consulta em uma tabela. Oque muda nessas consultas é o WHERE e o valor que eu vo acrescenta noque me for retornado.

 

 

public static $recebimento = 10.00;
public $recebimento_total;
public static $estorno = 50.00;
public $estorno_total;


function recebimento(){
        $result = $this->execute("SELECT COUNT(cod) as total from tabela WHERE tipo = 'recebimento'");
        $row = mysqli_fetch_assoc($result);
        $this->recebimento_total = $row["total"] * self::recebimento;
}

function estorno(){
        $result = $this->execute("SELECT COUNT(cod) as total from tabela WHERE tipo = 'estornos'");
        $row = mysqli_fetch_assoc($result);
        $this->estorno_total = $row["total"] * self::estorno;
}

OU

 

function atribui ($oque){
if ($oque == 'recebimento'){
        $result = $this->execute("SELECT COUNT(cod) as total from tabela WHERE tipo = 'recebimento'");
        $row = mysqli_fetch_assoc($result);
        $this->recebimento_total = $row["total"] * self::recebimento;
}
else
{
        $result = $this->execute("SELECT COUNT(cod) as total from tabela WHERE tipo = 'estornos'");
        $row = mysqli_fetch_assoc($result);
        $this->estorno_total = $row["total"] * self::estorno;
}
}

 

Simplificando é isso, mas é muito mais complicado, no caso o meu WHERE é só para exemplo nao pegue ele como base de substituiçao de tipo = '$oque'.

 

 

Você sabe se teria diferença de tempo de retorno para um dos dois? Ou qual o modo mais 'Correto' de se fazer em uma situação dessas.

 

entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta parte:

$row = mysqli_fetch_assoc($result);
        $this->estorno_total = $row["total"] * self::funcao;
é comum em todos os casos, certo ?

então, ela não deve se repetir.

 

Realmente, se fosse apenas um [ tipo = '$oque' ]

valeria apena, passar isso como parâmetro ou atributo a ser alterado.

 

O mais correto, é aquele que não faça você se repetir, e seja o mais simples de implementar(D.R.Y e K.I.S.S)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal,

 

William, vou postar meu codigo "o verdadeiro", quem sabe eu consiga melhorar algo.

 

<?php

include ('../../config/' . $_SESSION['bd'] . '.php');
require_once ('../../model/executar.php');

class ExtratoDeComissao extends Executar
{

    public static $data;


    public static $bonificacao_val;
    public $bonificacao_total;

    public static $areanetNao_val = 80.00;
    public $areanetNao_qt;
    public $areanetNao_total;

    public static $areanetSim_val = 76.00; //Valor valido para > 08/09
    public $areanetSim_qt;
    public $areanetSim_total;

    public static $debConta_val = 5.00;
    public $debConta_qt;
    public $debConta_total;

    public static $cinema_val = 15.00;
    public $cinema_qt;
    public $cinema_total;

    public $estorno_qt;
    public $estorno_total;

    public $contesto_qt;
    public $contesto_total;


    //---------------------------------------- RECEBIMENTOS -------------------------------------------
    //Comissao Normal
    function areanetNao()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								areanet = 'Nao'
								AND substring( data_recebimento , 1 , 7 ) = '" . self::$data . "'");
        $row = mysqli_fetch_assoc($result);
        $this->areanetNao_qt = $row["qt"];
        $this->areanetNao_total = self::$areanetNao_val * $row['qt'];
    }

    //Comissao Reduzida
    function areanetSim()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								areanet = 'Sim'
								AND substring( data_recebimento , 1 , 7 ) = '" . self::$data . "'");
        $row = mysqli_fetch_assoc($result);
        $this->areanetSim_qt = $row["qt"];
        $this->areanetSim_total = self::$areanetSim_val * $row['qt'];
    }

    //Comissao Deb.Conta
    function debConta()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								plano = 'Deb.Conta'
								AND substring( data_recebimento , 1 , 7 ) = '" . self::$data . "'");
        $row = mysqli_fetch_assoc($result);
        $this->debConta_qt = $row["qt"];
        $this->debConta_total = self::$debConta_val * $row['qt'];
    }

    //Comissao Tele Cine
    function cinema()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								cinema = 'on'
								AND substring( data_recebimento , 1 , 7 ) = '" . self::$data . "'");
        $row = mysqli_fetch_assoc($result);
        $this->cinema_qt = $row["qt"];
        $this->cinema_total = self::$cinema_val * $row['qt'];
    }

    //Bonificacao
    function bonificacao()
    {
        $result = $this->execute("SELECT bonificacao from tb_bonificacao WHERE
								substring( data , 1 , 7 ) = '" . self::$data . "'");
        while ($row = mysqli_fetch_assoc($result))
        {
            self::$bonificacao_val = $row['bonificacao'];
        }

        $result2 = $this->execute("SELECT COUNT(cod) as contratos from tb_contrato_tv WHERE
								substring( data_recebimento , 1 , 7 ) = '" . self::$data . "'");
        while ($row2 = mysqli_fetch_assoc($result2))
        {
            $this->bonificacao_total = self::$bonificacao_val * $row2["contratos"];
        }
    }

    //Total da Representação Comercial
    function totalRComercial()
    {
        return $this->bonificacao_total + $this->cinema_total + $this->areanetSim_total +
            $this->areanetNao_total + $this->debConta_total;
    }

    //---------------------------------------------CONTESTAÇÔES------------------------------------------------
    //Contestos
    function qtContestado()
    {
        $result = $this->execute("SELECT COUNT(cod) as contesto from tb_contrato_tv WHERE
        						data_extorno = '0000-00-00' AND data_recebimento = '0000-00-00'
								AND substring( data_situacao , 1 , 7 ) < '" . self::$data . "'
								AND situacao IN (select situacao from tb_situacao WHERE efetivada != '')");
        $row = mysqli_fetch_assoc($result);
        $this->contesto_qt = $row["contesto"];
    }
    //Comissao Normal
    function cAreanetNao()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								areanet = 'Nao'
								AND data_extorno = '0000-00-00' AND data_recebimento = '0000-00-00'
								AND substring( data_situacao , 1 , 7 ) < '" . self::$data . "'
								AND situacao IN (select situacao from tb_situacao WHERE efetivada != '')");
        $row = mysqli_fetch_assoc($result);
        return self::$areanetNao_val * $row['qt'];
    }

    //Comissao Reduzida
    function cAreanetSim()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								areanet = 'Sim'
								AND data_extorno = '0000-00-00' AND data_recebimento = '0000-00-00'
								AND substring( data_situacao , 1 , 7 ) < '" . self::$data . "'
								AND situacao IN (select situacao from tb_situacao WHERE efetivada != '')");
        $row = mysqli_fetch_assoc($result);
        return self::$areanetSim_val * $row['qt'];
    }

    //Comissao Deb.Conta
    function cDebConta()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								plano = 'Deb.Conta'
								AND data_extorno = '0000-00-00' AND data_recebimento = '0000-00-00'
								AND substring( data_situacao , 1 , 7 ) < '" . self::$data . "'
								AND situacao IN (select situacao from tb_situacao WHERE efetivada != '')");
        $row = mysqli_fetch_assoc($result);
        return self::$debConta_val * $row['qt'];
    }

    //Comissao Tele Cine
    function cCinema()
    {
        $result = $this->execute("SELECT COUNT(cod) as qt from tb_contrato_tv WHERE
								cinema = 'on'
								AND data_extorno = '0000-00-00' AND data_recebimento = '0000-00-00'
								AND substring( data_situacao , 1 , 7 ) < '" . self::$data . "'
								AND situacao IN (select situacao from tb_situacao WHERE efetivada != '')");
        $row = mysqli_fetch_assoc($result);
        return self::$cinema_val * $row['qt'];
    }
    
    //Total Contestado
    function totalContestado()
    {
       $this->contesto_total = $this->cAreanetNao() + $this->cAreanetSim() + $this->cCinema() + $this->cDebConta();
    }


    //------------------------------------------------ESTORNOS------------------------------------------------------
    //Estornos
    function estorno()
    {
        $result = $this->execute("SELECT COUNT(cod) as estornos from tb_contrato_tv WHERE
								substring( data_extorno , 1 , 7 ) = '" . self::$data . "'");
        $row = mysqli_fetch_assoc($result);
        $this->estorno_qt = $row["estornos"];
    }


}

?>

 

NOTE: Eu vou ter que criar de novo as 4 function "areanetSim, areanetNao, debconta, cinema" DENOVO para Contestados. é isso que eu nao quero ter que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

NOTE: Eu vou ter que criar de novo as 4 function "areanetSim, areanetNao, debconta, cinema" DENOVO para Contestados. é isso que eu nao quero ter que fazer.

 

Bom, se vale uma sugestão, eu apaguei os métodos areanetSim, areanetNao, debConta e cinema e criei apenas um método:

 

<?php
class ExtratoDeComissao extends Executar
{
    //...
     public function __call( $method , $argv ){
        $sql = sprintf( 'SELECT COUNT(cod) as qt from tb_contrato_tvWHERE substring( data_recebimento , 1 , 7 ) = "%s"' , self::$data );

        switch ( $method ){
            case 'areanetNao':
                $sql .= ' AND areanet="Nao"'; break;
            case 'areanetSim':
                $sql .= ' AND areanet="Sim"'; break;
            case 'debConta':
                $sql .= ' AND plano = "Deb.Conta"'; break;
            case 'cinema':
                $sql .= ' AND cinema = "on"'; break;
        }
        
        $result    = $this->execute( $sql );
        $row    = mysqli_fetch_assoc( $result );
        
        $property_qt    = sprintf( '%s_qt' , $method );
        $property_total    = sprintf( '%s_total' , $method );
        $property_val    = sprintf( '%s_val' , $method );
        
        $this->$property_qt = $row[ 'qt' ];
        $this->$property_total = self::$property_val * $row[ 'qt' ];
    }

   //...

 

Com isso, reunimos o que é comum para todos em um método só e você ainda conseguirá utilizar os mesmos nomes de métodos,

 

$obj->areanetSim();
$obj->areanetNao();

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal joao, voce poderia comentar seu codigo?

 

Estou meio perdido nele, esse metodo __call tem que função?

 

Amigo, de uma olhada nesse link, falei sobre isso outro dia:

http://forum.imasters.com.br/index.php?/topic/356252-metodos-magicos/

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.