montano 0 Denunciar post Postado Agosto 26, 2009 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
eibon 2 Denunciar post Postado Agosto 26, 2009 Tenta mostrar mais como ficaria o código. Não entendi bem sua dúvida. Compartilhar este post Link para o post Compartilhar em outros sites
montano 0 Denunciar post Postado Agosto 26, 2009 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
William Bruno 1501 Denunciar post Postado Agosto 26, 2009 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
montano 0 Denunciar post Postado Agosto 26, 2009 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
João Batista Neto 448 Denunciar post Postado Agosto 26, 2009 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
montano 0 Denunciar post Postado Agosto 26, 2009 legal joao, voce poderia comentar seu codigo? Estou meio perdido nele, esse metodo __call tem que função? vlw Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Agosto 26, 2009 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
montano 0 Denunciar post Postado Agosto 26, 2009 okay, valeu pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites