Carcleo 4 Denunciar post Postado Setembro 30, 2015 Tenho a seguinte consulta: function retornaClientesDevedores ($mesReferencia, $dias) { require_once "PhpUtil.php"; $PhpUtil = new PhpUtil(); $string = "SELECT idClientes, nome FROM clientes WHERE idClientes IN ( SELECT idClientes FROM planosclientes WHERE idPlanosClientes IN ( SELECT distinct(idPlanoClientes) FROM pagamentos WHERE mesReferencia NOT IN ('".$mesReferencia."') ) and ".$PhpUtil->diferencaDatas(date('Y-m-d'), date('Y-m')."-diaVencimento'".)->days." > ".$dias." UNION SELECT idPlanosClientes FROM planosclientes WHERE idPlanosClientes NOT IN (SELECT distinct(idPlanoClientes) FROM pagamentos) ) "; } Minha dificuldade é que tenho uma função que vem de uma classe. Essa função pede duas datas. Uma atual e outra que preciso pegar a data atual sem o dia, portanto `date('Y-m')` e concatenar com um campo `diaVencimento` da tabela para montar a data e gerar com isso 2015-09-diaVncimento. Como fazer essa concatenação no PHP? Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Setembro 30, 2015 Se você quer enviar a diferença de dias para a consulta que nem foi feita ainda e utilizando uma coluna da sua tabela como variável, você precisará utilizar o próprio banco de dados para calcular essa diferença. Supondo que você esteja utilizando o Mysql, uma forma de fazer isso é substituindo a sua classe pela função DATEDIFF Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 30, 2015 Pensando bem me parece que nem vou precisar disso. Um Cliente tem um plano e se compromete a pagar todo dia '15' por exemplo. Então, no dia '7'$ por exemplo quero tirar a lista do mês. Como só entra os que ainda não pagaram e que tem uma carência de 5 dias após a data, logo tria que fazer (diaHoje - DiaVencimento) o que dará (7-15 = -8) que é menor que os 5 dias de carência. Na verdade é o seguinte A função que estou usando é: function diferencaDatas ($dataInicio, $dataFim) { $dataInicio = new DateTime($dataInicio); $dataFim = new DateTime($dataFim); $diferencas = $dataInicio->diff($dataFim); return $diferencas; } Chamada: $dataHoje = date('Y-m-d'); $dataVencimento = date('Y-m')."-dataVencimento "; $diasDiferenca = diferencaDatas ($dataHoje , $dataVencimento ) ->days; Saber quantos dias de diferença são. Mas como a listagem será efetuada sempre dentro do mesmo mês, tanto $diaHoje quanto o $diaVencimento ocorrerão no mesmo mês, logo não precisarei da função bastando fazer a simples diferença entre eles. Estou certo em meu raciocínio? Pois se eu vou tirar a listagem por exemplo no dia 25, o mês é 09. Logo, vou pegar a data da listagem (25) e tirar o dia do vencimento (caso ainda não tenha sido paga) se der até 5, esta no prazo, caso contrário, esta em débito. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 30, 2015 classe corrigida. <?php class Relatorios { private $conexao; public function __construct ($_conexao) { $this->conexao = $_conexao; } /* //COMENTÁRIO DA FUNÇÃO ABAIXO //SELECIONAR OS ID'S E OS NOMES DOS CLIENTES $string = "SELECT idClientes, nome FROM clientes WHERE idClientes IN ( //SELECIONAR ID'S DOS CLIENTES QUE TEM PLANOS E QUE A DIA DE VENCIMENTO É MENOR QUE A O DIA ATUAL SELECT idClientes FROM planosclientes WHERE idPlanosClientes IN ( //MAS NÃO PAGARAM A PARCELA DO MES CORRENTE SELECT distinct(idPlanoClientes) FROM pagamentos WHERE mesReferencia NOT IN ('".$mesReferencia."') ) and DATEDIFF (curdate(), CONCAT('".date('Y-m')."','-', diaVencimento)) > ".$dias." //UNIÃO COM UNION //SELECIONAR ID'S DOS CLIENTES QUE TEM PLANOS E QUE NÃO PAGARAM NENHUMA PARCELA SELECT idPlanosClientes FROM planosclientes WHERE idPlanosClientes NOT IN (SELECT distinct(idPlanoClientes) FROM pagamentos) ) "; */ function retornaClientesDevedores ($mesReferencia, $dias) { $retorno = array(); $string = "SELECT DISTINCT(idClientes), nome FROM clientes WHERE idClientes IN ( SELECT idClientes FROM planosclientes WHERE idPlanosClientes IN ( SELECT distinct(idPlanoClientes) FROM pagamentos WHERE mesReferencia NOT IN ('".$mesReferencia."') ) and DATEDIFF (curdate(), CONCAT('".date('Y-m')."','-', diaVencimento)) > ".$dias." UNION SELECT idPlanosClientes FROM planosclientes WHERE idPlanosClientes NOT IN (SELECT distinct(idPlanoClientes) FROM pagamentos) ) ORDER BY nome"; $dados = $this->conexao->query($string); if($dados->num_rows == 0) { $retorno = null; } else { $contador = 0; while ( list ($idClientes, $nomeClientes) = $dados->fetch_row()) { $retorno[$contador][0] = $idClientes; $retorno[$contador][1] = $nomeClientes; $contador++; } } return $retorno; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites