PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por cjp »

Verdade, que vacilo! Muito obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por cjp »

Desculpe, mas vou precisar incomodar novamente.
Neste outro código:

Código: Selecionar todos

$sql = "SELECT dtcotacao,cotacao FROM acoes where codigo='".$cd."' and compvenda=0";
$rs=mysql_query($sql);
 

$dthoje = date('Y')."-".date('m')."-".date('d');
$dt = date('Y-m-d', strtotime("-120 days",strtotime($dthoje))); 
$dtult = $dt;


	    echo "<br>";
	    echo "<br>";
$rs=mysql_query($sql);

$obj = "['2020-01-01', '0'],";
if (mysql_num_rows($rs)==0)
{
   $obj.="['Nenhuma data', 0],";
}
else
{
   while ($l = mysql_fetch_array($rs))
   {

      if($l['dtcotacao']>$dtult OR $l['dtcotacao']==$dt)
	    {
        $obj.="['".$l['dtcotacao']."',".$l['cotacao']."],";
        $dtult = date('Y-m-d', strtotime("+15 days",strtotime($l['data']))); 
		}
   }
}
$obj = "[".substr($obj,0,strlen($obj)-1)."]";


echo $obj;

Vejo dois problemas:

1) não está aparecendo o gráfico, talvez porque o número de dados esteja muito grande (o que leva ao segundo problema);

2) o $obj está assim:
[['2020-01-01', '0'],['2019-12-17',29.41],['2019-12-17',29.77],['2019-12-19',30.54],['2019-12-20',30.10],['2019-12-22',30.26],['2019-12-23',30.19],['2019-12-26',30.62],['2019-12-26',30.80],['2019-12-28',30.52],['2019-12-30',30.52],['2020-01-01',30.18],['2020-01-03',30.70],['2020-01-03',30.93],['2020-01-05',30.45],['2020-01-06',30.90],['2020-01-08',30.69],['2020-01-10',30.40],['2020-01-10',30.38],['2020-01-12',30.27],['2020-01-13',30.26],['2020-01-14',29.90],['2020-01-16',29.65],['2020-01-18',29.85],['2020-01-20',29.95],['2020-01-22',29.62],['2020-01-22',29.51],['2020-01-22',29.56],['2020-01-22',29.43],['2020-01-22',29.43],['2020-01-22',29.49],['2020-01-23',29.29],['2020-01-23',29.29],['2020-01-23',28.95],['2020-01-23',29.42],['2020-01-23',29.42],['2020-01-23',29.48],['2020-01-23',29.60],['2020-01-24',29.60],['2020-01-24',29.60],['2020-01-24',29.58],['2020-01-24',29.26],['2020-01-24',29.38],['2020-01-24',29.30],['2020-01-25',29.30],['2020-01-26',29.30],['2020-01-27',28.26],['2020-01-27',28.32],['2020-01-27',28.19],['2020-01-27',28.15],['2020-01-27',28.03],['2020-01-28',28.03],['2020-01-28',28.72],['2020-01-28',28.71],['2020-01-28',28.76],['2020-01-28',28.79],['2020-01-28',28.84],['2020-01-28',29.01],['2020-01-28',28.80],['2020-01-29',28.80],['2020-01-29',28.89],['2020-01-29',28.83],['2020-01-29',28.91],['2020-01-29',28.85],['2020-01-30',28.85],['2020-01-30',28.35],['2020-01-30',28.39],['2020-01-30',28.47],['2020-01-30',28.94],['2020-01-31',28.94],['2020-01-31',28.94],['2020-01-31',28.94],['2020-01-31',28.48],['2020-01-31',28.46],['2020-01-31',28.39],['2020-01-31',28.46],['2020-02-01',28.45],['2020-02-01',28.45],['2020-02-02',28.45],['2020-02-03',28.45],['2020-02-03',28.45],['2020-02-03',28.45],['2020-02-03',28.56],['2020-02-03',28.60],['2020-02-03',28.43],['2020-02-03',28.45],['2020-02-03',28.27],['2020-02-03',28.27],['2020-02-03',28.18],['2020-02-03',28.18],['2020-02-04',28.18],['2020-02-04',28.65],['2020-02-04',28.71],['2020-02-04',28.68],['2020-02-04',29.01],['2020-02-04',28.90],['2020-02-04',28.78],['2020-02-05',28.63],['2020-02-05',28.63],['2020-02-05',29.10],['2020-02-05',28.87],['2020-02-05',28.88],['2020-02-05',28.70],['2020-02-05',28.67],['2020-02-05',28.39],['2020-02-06',28.39],['2020-02-06',28.68],['2020-02-06',29.32],['2020-02-06',29.28],['2020-02-06',28.76],['2020-02-06',28.96],['2020-02-06',29.18],['2020-02-06',29.18],['2020-02-06',29.18],['2020-02-07',29.18],['2020-02-07',28.94],['2020-02-07',29.13],['2020-02-07',29.24],['2020-02-07',29.09],['2020-02-07',28.93],['2020-02-07',28.93],['2020-02-07',28.93],['2020-02-08',28.93],['2020-02-09',28.93],['2020-02-10',28.93],['2020-02-10',28.93],['2020-02-10',28.90],['2020-02-10',28.70],['2020-02-10',28.83],['2020-02-10',29.02],['2020-02-10',29.00],['2020-02-10',29.13],['2020-02-10',29.13],['2020-02-11',29.13],['2020-02-11',29.32],['2020-02-11',29.48],['2020-02-11',29.50],['2020-02-11',29.56],['2020-02-12',29.48],['2020-02-12',29.84],['2020-02-12',29.85],['2020-02-12',30.07],['2020-02-12',30.07],['2020-02-12',30.18],['2020-02-12',30.15],['2020-02-12',30.13],['2020-02-12',30.13],['2020-02-13',30.13],['2020-02-13',30.02],['2020-02-13',29.91],['2020-02-13',29.72],['2020-02-13',29.72],['2020-02-14',29.72],['2020-02-14',29.72],['2020-02-14',29.91],['2020-02-14',29.91],['2020-02-16',29.42],['2020-02-18',29.36],['2020-02-20',30.55],['2020-02-22',29.14],['2020-02-24',29.14],['2020-02-24',29.14],['2020-02-26',29.14],['2020-02-26',26.26],['2020-02-26',26.27],['2020-02-28',25.30],['2020-03-01',25.34],['2020-03-02',26.64],['2020-03-02',26.64],['2020-03-02',26.62],['2020-03-02',26.31],['2020-03-02',26.40],['2020-03-02',26.43],['2020-03-02',26.53],['2020-03-02',26.53],['2020-03-02',26.53],['2020-03-02',26.53],['2020-03-03',26.53],['2020-03-03',26.53],['2020-03-03',26.53],['2020-03-03',26.62],['2020-03-03',26.60],['2020-03-03',27.10],['2020-03-03',26.36],['2020-03-03',26.23],['2020-03-03',25.94],['2020-03-03',26.12],['2020-03-03',26.05],['2020-03-03',26.05],['2020-03-03',26.05],['2020-03-04',26.05],['2020-03-04',26.05],['2020-03-04',26.68],['2020-03-04',26.66],['2020-03-04',26.55],['2020-03-04',26.33],['2020-03-04',26.59],['2020-03-04',26.66],['2020-03-04',26.66],['2020-03-04',26.73],['2020-03-04',26.79],['2020-03-04',26.86],['2020-03-04',26.89],['2020-03-04',26.89],['2020-03-04',26.89],['2020-03-04',26.89],['2020-03-04',26.89],['2020-03-05',26.89],['2020-03-05',26.89],['2020-03-05',26.89],['2020-03-05',26.55],['2020-03-05',26.51],['2020-03-05',26.40],['2020-03-05',26.16],['2020-03-05',26.08],['2020-03-05',25.94],['2020-03-05',25.27],['2020-03-05',25.29],['2020-03-07',22.83],['2020-03-09',22.83],['2020-03-09',18.01],['2020-03-09',15.92],['2020-03-10',17.63],['2020-03-11',16.76],['2020-03-13',13.60],['2020-03-15',15.40],['2020-03-17',13.09],['2020-03-19',11.29],['2020-03-19',11.42],['2020-03-19',12.89],['2020-03-20',13.27],['2020-03-23',11.57],['2020-03-25',13.58],['2020-03-26',14.06],['2020-03-31',13.80],['2020-03-31',13.90],['2020-04-01',14.25],['2020-04-02',15.17],['2020-04-02',15.68],['2020-04-04',15.34],['2020-04-06',15.72],['2020-04-08',16.40],['2020-04-09',16.76],['2020-04-11',16.82],['2020-04-13',16.73],['2020-04-14',16.72]]
Veja que ele não está pulando corretamente os 15 dias. Gostaria de entender o que estou fazendo errado.
Inacio de Carvalho Neto
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por ANDRIL »

Não entendi o que voce esta tentando montar, veja:
if($l['dtcotacao']>$dtult OR $l['dtcotacao']==$dt)
{
$obj.="['".$l['dtcotacao']."',".$l['cotacao']."],";
$dtult = date('Y-m-d', strtotime("+15 days",strtotime($l['data']))); #--de onde veio este campo???
}
mude para
$dtult = date('Y-m-d', strtotime("+15 days",strtotime($dtult)));
e veja se dá o resultado esperado.

A grande quantidade de dados passada ao gráfico pode ser sim um dos motivos pelo qual não é exibido. Consulte sobre os limites do gráfico no manual.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por cjp »

A ideia é pegar dados de 15 em 15 dias, para fazer um gráfico enxuto.
Vi que realmente estava errada a linha
$dtult = date('Y-m-d', strtotime("+15 days",strtotime($l['data'])));
porque é pra ser dtcotacao no lugar de data.
Fiz assim:

Código: Selecionar todos

$sql = "SELECT dtcotacao,cotacao FROM acoes where codigo='".$cd."' and compvenda=0";
$rs=mysql_query($sql);
 

$dthoje = date('Y')."-".date('m')."-".date('d');
$dt = date('Y-m-d', strtotime("-120 days",strtotime($dthoje))); 
$dtult = $dt;


	    echo "<br>";
	    echo "<br>";
$rs=mysql_query($sql);

$obj = "['2020-01-01', '0'],";
if (mysql_num_rows($rs)==0)
{
   $obj.="['Nenhuma data', 0],";
}
else
{
   while ($l = mysql_fetch_array($rs))
   {

      if($l['dtcotacao']>$dtult OR $l['dtcotacao']==$dt)
	    {
        $obj.="['".$l['dtcotacao']."',".$l['cotacao']."],";
        $dtult = date('Y-m-d', strtotime("+15 days",strtotime($l['dtcotacao']))); 
		}
   }
}
$obj = "[".substr($obj,0,strlen($obj)-1)."]";


echo $obj;

Os dados agora aparecem corretos em $obj:
[['2020-01-01', '0'],['2019-12-19',30.54],['2020-01-05',30.45],['2020-01-22',29.62],['2020-02-07',29.18],['2020-02-24',29.14],['2020-03-11',16.76],['2020-03-31',13.80],['2020-04-16',15.68]]
Mas estranhamente, ainda assim o gráfico não aparece.
Inacio de Carvalho Neto
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por ANDRIL »

Se não aparece deve ser algo na parte do código do javascritp. Testei este $obj aqui e montou o gráfico.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por cjp »

Mas eu não mexi em nada no código java (nem saberia mexer). Veja:

Código: Selecionar todos

  <html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);
	  
      function drawChart() {
        var data = google.visualization.arrayToDataTable(<? echo( $obj ) ?>);
        var options = {
          title: 'Cotações de '<? echo( $cd ) ?>,
          curveType: 'function',
        };

        var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="curve_chart" style="width: 900px; height: 500px"></div>
  </body>
</html>

Esse mesmo código funciona nas outras páginas que eu fiz.

Aí funcionou exatamente assim como está no meu?
Inacio de Carvalho Neto
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por ANDRIL »

Isso pode ser o problema, esta colocando uma string fora das aspas simples.
cjp escreveu: title: 'Cotações de '<? echo( $cd ) ?>,
tente
title: 'Cotações de <? echo( $cd ) ?> ',
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

PHP: exibir gráfico com dados obtidos de uma tabela MySQL

Mensagem por cjp »

De fato, assim funcionou.
Muito obrigado.
Inacio de Carvalho Neto
Responder