Jump to content
Pedro12345

[Resolvido] Colocar 2 Select's na mesma Query

Recommended Posts

Pedro12345

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

Share this post


Link to post
Share on other sites
HappyHippyHippo
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

Share this post


Link to post
Share on other sites
Pedro12345

Obrigado, não me tinha ocorrido trabalhar com as arrays!!

Funcionou!! :thumbsup:

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Pedro12345

 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 by Pedro12345

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.