Ir para conteúdo

Arquivado

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

Vanderlan

query

Recommended Posts

Boa noite.

 

Como eu poderia juntar essas duas querys?

$sql = "SELECT eps, count(*) as total_atrasadas
        FROM controle
        WHERE status IN('EXECUÇÃO', 'EXECUCAO') AND YEAR(STR_TO_DATE(prazoobra,'%d/%m/%Y')) = YEAR(CURRENT_DATE()) AND STR_TO_DATE(prazoobra,'%d/%m/%Y') < CURRENT_DATE()
        GROUP BY eps";


--------------------------------------------------------------------------------------------


$sql = "SELECT eps, count(*) as total_atrasadas
        FROM controle
        WHERE status IN('EXECUÇÃO', 'EXECUCAO') AND YEAR(STR_TO_DATE(prazoobra,'%d/%m/%Y')) = YEAR(CURRENT_DATE()) AND STR_TO_DATE(prazoobra,'%d/%m/%Y') > CURRENT_DATE()
        GROUP BY eps";





Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql = "SELECT eps, count(*) as total_atrasadas
        FROM controle
        WHERE status IN('EXECUÇÃO', 'EXECUCAO') 
        AND YEAR(STR_TO_DATE(prazoobra,'%d/%m/%Y')) = YEAR(CURRENT_DATE()) 
        AND ( 
          STR_TO_DATE(prazoobra,'%d/%m/%Y') < CURRENT_DATE()
          OR STR_TO_DATE(prazoobra,'%d/%m/%Y') > CURRENT_DATE()
        )
        GROUP BY eps";
o que me faz pensar.. você precisa mesmo testar isso? ou poderia retirar esse teste ?

 

 

vc só não quer pregar, se for IGUAL a hoje?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que estou trabalhando com uns gráficos e preciso pegar as duas possibilidades.

 

 

tipo esse aqui

$sql = "SELECT fiscal,
               COUNT(CASE status WHEN 'ENERGIZADA' THEN 1 END) AS energizada,
               COUNT(CASE status WHEN 'EXECUCAO' THEN 1 END) AS execucao 
               FROM " . TABLE_NAME . " GROUP BY fiscal";

$PDO = db_connect();

$stmt = $PDO->query($sql);

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

// print_r($data); exit;

$chartData = "['Fiscal', 'Energizada', 'Execução'],";
foreach ($data as $_data)
{
    $chartData .= sprintf("['%s', %d, %d],", $_data['fiscal'], $_data['energizada'], $_data['execucao']);
}

?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">

        <title>Gráfico</title>
        
        <script type="text/javascript" src="https://www.google.com/jsapi"></script>
        <script type="text/javascript">

        google.load("visualization", "1.1", {packages:["bar"]});
        google.setOnLoadCallback(drawChart);
        
        function drawChart()
        {
            var data = google.visualization.arrayToDataTable([
              <?php echo $chartData ?>
            ]);

            var options = {
              chart: {
                title: 'Demanda de Obras ',
                subtitle: 'Por Fiscal',
              }
            };

            var chart = new google.charts.Bar(document.getElementById('chart'));

            chart.draw(data, options);
        }
        
        </script>
    </head>

    <body>
        
        <div id="chart" style="width: 850px; height: 450px;"></div>

    </body>

</html>

Eu tentei fazer assim ó:

<?php

require 'init.php';

$sql = "(SELECT eps, count(*) as total_atrasadas
        FROM controle
        WHERE status IN('EXECUÇÃO', 'EXECUCAO') AND YEAR(STR_TO_DATE(prazoobra,'%d/%m/%Y')) = YEAR(CURRENT_DATE()) AND STR_TO_DATE(prazoobra,'%d/%m/%Y') < CURRENT_DATE()
        GROUP BY eps)
UNION
        (SELECT eps, count(*) as total_prazo
        FROM controle
        WHERE status IN('EXECUÇÃO', 'EXECUCAO') AND YEAR(STR_TO_DATE(prazoobra,'%d/%m/%Y')) = YEAR(CURRENT_DATE()) AND STR_TO_DATE(prazoobra,'%d/%m/%Y') > CURRENT_DATE()
        GROUP BY eps)
        
        ";




$PDO = db_connect();

$stmt = $PDO->query($sql);

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

$chartData = "['EPS', 'Prazo', 'fora'],";
foreach ($data as $_data)
{

    
    
        $chartData .= sprintf("['%s', %d, %d],", $_data['eps'], $_data['total_atrasadas'], $_data['total_prazo']);
}


?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">

        <title>Gráfico</title>
        
        <script type="text/javascript" src="https://www.google.com/jsapi"></script>
        <script type="text/javascript">

        google.load("visualization", "1.1", {packages:["bar"]});
        google.setOnLoadCallback(drawChart);
        
        function drawChart()
        {
            var data = google.visualization.arrayToDataTable([
              <?php echo $chartData ?>
            ]);

            var options = {
              chart: {
                title: 'Demanda de Obras ',
                subtitle: 'Por Fiscal',
              }
            };

            var chart = new google.charts.Bar(document.getElementById('chart'));

            chart.draw(data, options);
        }
        
        </script>
    </head>

    <body>
        
        <div id="chart" style="width: 850px; height: 450px;"></div>

    </body>

</html>

Eu consigo realizar a consulta, mas não aparece no gráfico.

 

 

A única diferença de uma consulta para a outra é

 

STR_TO_DATE(prazoobra,'%d/%m/%Y') < CURRENT_DATE()

 

STR_TO_DATE(prazoobra,'%d/%m/%Y') > CURRENT_DATE()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, com o OR não deu certo ?

 

Outra opção seria:

 

$sql = "SELECT eps, count(*) as total_atrasadas
        FROM controle
        WHERE status IN('EXECUÇÃO', 'EXECUCAO') 
        AND YEAR(STR_TO_DATE(prazoobra,'%d/%m/%Y')) = YEAR(CURRENT_DATE()) 
        AND ( 
          STR_TO_DATE(prazoobra,'%d/%m/%Y') <> CURRENT_DATE()
        )
        GROUP BY eps";
entendeu ? mais direto do que fazer o < e >, fazer o diferente logo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi,

 

Mas o que quero é algo parecido com isso:

$sql = "SELECT fiscal,
               COUNT(CASE status WHEN 'ENERGIZADA' THEN 1 END) AS energizada,
               COUNT(CASE status WHEN 'EXECUCAO' THEN 1 END) AS execucao 
               FROM " . TABLE_NAME . " GROUP BY fiscal";

Para que eu possa associar usando os:

 AS energizada,
 AS execucao 

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.