MySQL Forums
Forum List  »  Portuguese

Gráfico com PHP + MySQL
Posted by: Abel Figueiredo
Date: October 09, 2008 02:10AM

Preciso da vossa ajuda para o seguinte:

A situação:
Tenho uma tabela em MySQL onde guardo informação registada de diversas fontes a diversas datas (Ex: voltagem de uma máquina em diversos instantes) e preciso de gerar gráficos para a representar.

Para conseguir isto, e de forma a não ter um gráfico demasiado grande ou ilegível, necessito de definir um intervalo de tempo e dividir este intervalo em instantes (algo como ler dados entre as 13:00 e as 13:30, dividido em 30 instantes).

O utilizador define o intervalo, logo para calcular os instantes a representar eu faço simplesmente abs($fim-$inicio)/$instantes. O problema em concreto começa aqui.

O problema:
A base de dados não contém informação para cada segundo, logo o instante que eu quero representar poderá não existir na minha colecção de dados. Assim sendo, em vez de recolher aquele campo conhecido eu quero recolher o campo que ocorreu o mais próximo possível. Ex: Quero ler a voltagem da máquina 1 às 13:33:22, mas na base de dados só tenho registado esse valor para as 13:33:12 e 13:33:26. Neste caso quero guardar o segundo valor, pois é o mais próximo.

Toda esta informação é para ser guardada num array para poder passar para a class que me cria o gráfico.

Até onde cheguei:
Neste momento tenho algo delineado, mas está tão lento que recebo a mensagem dos 30seg.
Tenho uma class onde guardo os valores que vou lendo.

Code:

class linhaTabela
{
var $maquina;
var $valor;
var $data;
}


Considero esta class como uma máquina. Cada instância desta class irá representar uma linha distinta no meu gráfico final. A variável $data não será representada e guardo-a apenas para poder calcular as distâncias ao valor desejado.
Tenho um array onde guardo o ID de todas as máquinas cuja evolução quero representar.

Estou a ir buscar à BD o seguinte:

Code:

SELECT * FROM leituras WHERE maquina in($lista_de_maquinas) AND `data` BETWEEN $inicio AND $fim

Depois para cada linha recolhida, percorro todo o array a representar, substituindo o valor lá guardado sempre que o valor lido estiver mais próximo. A minha tabela tem muitas entradas, algo acima dos 100.000

Isto está a parecer-me uma solução demasiado rebuscada e creio que deverá haver algo mais simples, quer seja a nível de PHP, quer seja a nível do query que estou a realizar.

Aguardo as vossas ideias.

Options: ReplyQuote


Subject
Views
Written By
Posted
Gráfico com PHP + MySQL
8427
October 09, 2008 02:10AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.