Pedro12345 Posted October 4, 2013 at 05:03 PM Report #527660 Posted October 4, 2013 at 05:03 PM Olá a todos. Estou a ter algumas dúvidas de como fazer 2 select's para a mesma query.. O pretendido é selecionar um intervalo de dados e apresentar os ultimos X valores num gráfico.. Tenho uma tabela com o nome dados e pretendo inicialmente juntar a data e hora, numa só coluna, de forma a aparecer no eixo dos X a data e hora juntas, ficando com o nome de datahora.. Posteriormente, inverti a ordem dos valores de forma a mostrar os ultimos valores lidos, e defini o limite de 60.. Estando correto desta forma: $query=mysql_query("SELECT tempc, CONCAT(data,' ', hora) AS datahora, id, FROM dados order by id DESC limit 60" ); Gravando os valores para o eixo dos Y e X assim: while($row = mysql_fetch_array($query)) { $datay[] = $row['tempc']; $datax[] = $row['datahora']; } Aparecendo até aqui tudo correto no gráfico! A questão é que desta forma, aparece no gráfico os ultimos 60 registos datahora do fim para o inicio... quando pretendia que esses 60 ultimos selecionados, inverter-los novamente... Ou seja, começa-me da datahora final para a datahorainicial, quando queria colocá-los pela ordem Ascendente no gráfico!! Tentei desta forma: $query=mysql_query("SELECT * FROM ( select * from dados, tempc, CONCAT(data, ' ', hora) AS datahora, id, order by id DESC limit 60) UNION (SELECT * FROM ( select * from dados, tempc, CONCAT(data, ' ', hora) AS datahora, id, order by id [b]ASC[/b]))"); aparecendo o seguinte erro: mysql_fetch_array() expects parameter 1 to be resource, boolean given Empty input data array specified for plot. Must have at least one data point. Algúem sabe algum "truque" para aparecer de novo por ordem ascendente esses valores? 🙂 Cumps, Pedro
HappyHippyHippo Posted October 4, 2013 at 05:12 PM Report #527663 Posted October 4, 2013 at 05:12 PM while($row = mysql_fetch_array($query)) { $datay[] = $row['tempc']; $datax[] = $row['datahora']; } $datay = array_reverse($datay); $datax = array_reverse($datax); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Pedro12345 Posted October 7, 2013 at 10:08 AM Author Report #527851 Posted October 7, 2013 at 10:08 AM Obrigado, não me tinha ocorrido trabalhar com as arrays!! Funcionou!! 👍 Como quero sempre melhorar, agora fiz um select para o utilizador selecionar a datainicio e datafim e horainicio e horafim e só mostrar no gráfico os valores entre esse intervalo de tempo.. Criei algo como isto: http://img842.imageshack.us/img842/6382/3zf4.png Depois os valores foram apresentados desta forma: foreach ($_POST['selectedValue1'] as $datainicio) { } foreach ($_POST['selectedValue2'] as $datafim) { } foreach ($_POST['selectedValue3'] as $horainicio) { } foreach ($_POST['selectedValue4'] as $horafim) { } $sql="SELECT * FROM dados WHERE data BETWEEN '$datainicio' AND '$datafim' and hora BETWEEN '$horainicio' AND '$horafim' order by id"; $query=mysql_query($sql) or die ("Nao seleccionou tabela!"); $datay=array(); $datax=array(); $dataz=array(); while($row = mysql_fetch_array($query)) { $datay[] = $row['tempc']; $datax[] = $row['hora']; $dataz[] = $row['data']; } $dataz = array_merge($datax, $dataz); A questão é que no gráfico no eixo dos x, mostra-me apenas a data ou a hora, e não ambas as informações.. tentei fazer o array_merge, mas continua a aparecer-me apenas uma informação. Será possível fazer outro Select e fazer o CONCAT(data, ' ', hora) AS datahora ou será necessário criar primeiro alguma tabela temporária com o $SQL efetuado e depois fazer o CONCAT?? Algumas sugestão?? Cumps, Pedro
HappyHippyHippo Posted October 7, 2013 at 10:13 AM Report #527852 Posted October 7, 2013 at 10:13 AM espero que tenhas percebido que não fazia sentido nenhum separar a data da hora ... sim, podes fazer o concat no select sem problemas. existem soluções em PHP mas era complicar o que se resolve facilmente dessa maneira IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Pedro12345 Posted October 7, 2013 at 10:34 AM Author Report #527855 Posted October 7, 2013 at 10:34 AM (edited) foreach ($_POST['selectedValue1'] as $datainicio) { } foreach ($_POST['selectedValue2'] as $datafim) { } foreach ($_POST['selectedValue3'] as $horainicio) { } foreach ($_POST['selectedValue4'] as $horafim) { } $var1= "$datainicio $horainicio"; (2013-09-23 20:00:00) $var2= "$datafim $horafim"; (2013-09-30 21:00:00) $sql="SELECT CONCAT(data,' ',hora)AS datahora, id, tempc, FROM dados WHERE datahora BETWEEN '$var1' AND '$var2' order by id"; $query=mysql_query($sql) or die ("Nao seleccionou tabela!"); $datay=array(); $datax=array(); while($row = mysql_fetch_array($query)) { $datay[] = $row['tempc']; $datax[] = $row['datahora']; } Diz-me que não seleccionei a tabela.. problema com o $sql.. devo ter definido algo errado no SELECT.... Edited October 7, 2013 at 10:49 AM by Pedro12345
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now