vypisuji data takto:
<?
$spojeni=mysql_connect("localhost","jmeno","heslo");
$co="SELECT * FROM tab";
$navrat=mysql_db_query("db", $co, $spojeni);
for ($i=1;$i<mysql_num_fields($navrat); $i++);
while (list( $datum, $id ,$T1,) = mysql_fetch_row($navrat)){
echo(" $datum), $id, $T1 <br>");
}
?>
ale to mi vypíše celý sloupec.
Dá se nějak vypsat třeba jen posledníc 20 záznamů?
Nebo třeba od řádku x do řádku x+20.
díky
Na to se používá LIMIT. Bude nutné podle data udělat SORT DESC, vezmeš prvních 20 a znovu seřadíš, tentokrát vzestupně. Asi bude vhodné vytvořit k tabulce index podle zmíněného časového razítka.
napadlo mě toto:
vypisovat data sestupně pomocí fce DESC
a fce LIMIT zobrazit 20 záznamů.
ale toto je asi špatně
$co="SELECT * FROM sds ORDER BY $T1 DESC LIMIT 20,";
Chybička se vloudila. Předpokládám, že timestamp je označen jako sloupec T1:
$co="SELECT * FROM sds ORDER BY T1 DESC LIMIT 20;";
nene $T1 je teploměr1.
$datum je "datum" :-)
$id je číslo řádku
Tak proč jsi to chtěl řadit podle teploty?
$co="SELECT * FROM sds ORDER BY datum DESC LIMIT 20;";
už jsem si to zkusil. Seřadilo mi to podle teploty. :-)
Kite, když už jsi na příjmu
poradíš mi s tímto?
Jak to do toho skriptu výpisu z db dosadit?
$fd=fopen('data.txt','a');
$data=date('r');
fwrite($fd,"$T1");
fclose($fd);
díky
Nerozumím dotazu. Do souboru data.txt zapisuješ (přidáváš na konec) hodnotu z proměnné $T1. Co chceš odkud kam zapsat? A k čemu máš proměnnou $data, když ji nikde nepoužíváš?
do toho původního skriptu
<?
$spojeni=mysql_connect("localhost","jmeno","heslo");
$co="SELECT * FROM tab";
$navrat=mysql_db_query("db", $co, $spojeni);
for ($i=1;$i<mysql_num_fields($navrat); $i++);
while (list( $datum, $id ,$T1,) = mysql_fetch_row($navrat)){
echo(" $datum), $id, $T1 <br>");
}
?>
nechci tam mít to
echo(" $datum), $id, $T1 <br>");
ale napasovat tam to zapisování do souboru data.txt
Myslíš tohle?
fwrite($fd,"$datum), $id, $T1 <br>");
<?
$spojeni=mysql_connect("localhost","jmeno","heslo");
$co="SELECT * FROM tab";
$navrat=mysql_db_query("db", $co, $spojeni);
for ($i=1;$i<mysql_num_fields($navrat); $i++);
while (list( $datum, $id ,$T1,) = mysql_fetch_row($navrat)){
//echo(" $datum), $id, $T1 <br>");
$fd=fopen('data.txt','a');
$data=date('r');
fwrite($fd,"$datum), $id, $T1 <br>");
fclose($fd);
}
?>
<?
$spojeni=mysql_connect("localhost","jmeno","heslo");
$co="SELECT datum,id,T1 FROM tab";
$navrat=mysql_db_query("db", $co, $spojeni);
$fd=fopen('data.txt','a');
for ($i=1;$i<mysql_num_fields($navrat); $i++);
while (list( $datum, $id ,$T1) = mysql_fetch_row($navrat)){
fwrite($fd,"$datum), $id, $T1 <br>");
}
fclose($fd);
?>
Jenom mi stále není jasné, k čemu ti to bude. Postrádá to logiku.
http://www.highcharts.com/demo/line-labels
u grafu máš view options.
Místo hodnot které jsou psané přímo, dávám hodnoty z databáze. Ale ten skript který vyčítá z databáze tam nejde dát přímo.
funguje mi toto
[<?php echo file_get_contents('teplota.php'); ?>]
v souboru teplota.php mám ten předchozí skript.
Ale chci mít v jednom souboru skript který bude posílat do více souborů.
uff
Ten skript, který to vyčítá z databáze, tam zcela jistě jde dát přímo. Napiš strukturu, kterou highcharts očekává a dáme to dohromady. Možná tam jen chybí správná hlavička MIME.
očekává toto:
series: [{
name: 'Tokyo',
data: [7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
}, {
name: 'London',
data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}]
a já mám toto:
series: [{
name: 'Teplota1',
data: [<?php echo file_get_contents('teplota1.php'); ?>]
}, {
name: 'Teplota2',
data: [<?php echo file_get_contents('teplota2.php'); ?>]
}]
nevím proč, ale tohle mi tam nejde
<?
$spojeni=mysql_connect("localhost","jmeno","heslo");
$co="SELECT * FROM tab";
$navrat=mysql_db_query("db", $co, $spojeni);
for ($i=1;$i<mysql_num_fields($navrat); $i++);
while (list( $T1,) = mysql_fetch_row($navrat)){
echo(" $T1 <br>");
}
?>
Protože mu cpeš skript místo dat. Funkce file_get_contents() zkopíruje skript, ale neprovede ho.
Asi rozumím.
Ale kam s tím.
Vytvořit v javaskriptu nějakou proměnnou a do té vložit skript a pak tu proměnnou vyčíst jako data?
Nejprimitivnější metodou by mohlo být prosté nahrazení funkce file_get_contents() funkcí include(). Je však zbytečné databázi otvírat 2x (velká režie), takže další úpravy budou víc než vhodné.
Dá se to s přehledem nacpat do jednoho skriptu.
Určitě to jde napsat lépe, střílím od pasu:
<?
$spojeni=mysql_connect("localhost","jmeno","heslo");
$co="SELECT T1,T2 FROM tab ORDER BY datum DESC LIMIT 20;";
$navrat=mysql_db_query("db", $co, $spojeni);
while (list( $T1,$T2) = mysql_fetch_row($navrat)){
$teploty1[]=$T1;
$teploty2[]=$T2;
}
$T1=implode(',',array_reverse($teploty1));
$T2=implode(',',array_reverse($teploty2));
echo <<<EOT
series: [{
name: 'Teplota1',
data: [$T1]
}, {
name: 'Teplota2',
data: [$T2]
}]
EOT;
?>
takto vypisuji z databáze datum:
<?
$spojeni=mysql_connect("localhost","jmeno","heslo");
$co="SELECT datum FROM data_1 ORDER BY datum DESC LIMIT 20;";
$navrat=mysql_db_query("energie", $co, $spojeni);
while (list( $datum) = mysql_fetch_row($navrat)){
$datum1[]=$datum;
}
$datum1=implode("','",array_reverse($datum1));
echo <<<EOT
xAxis: {
categories: ['$datum1'],
},
EOT;
?>
vypíše se mi v tomto formátu: 2011-12-14 19:42:06
jde udělat aby se vypsal třeba jen rok, měsíc, nebo hodina a minuta?
díky
Jistě. Mrkni se na
http://www.tutorialspoint.com/mysql/mysql-date-time-functions.htm#function_date-format
Rozhodně je fajnovější, když to uděláš přímo v databázi, než to nechat šmudlit pomalými skripty v PHP.
BTW: Proč to nevypisuješ takto?
$co="SELECT datum,T1,T2 FROM tab ORDER BY datum DESC LIMIT 20;";
Přece máš tu trojici v databázi pohromadě, tak bys s tím měl i zacházet. Místo sloupce datum samozřejmě použij požadovanou funkci, ale ORDER BY neměň (pokud nechceš řadit podle něčeho jiného). Jeden SELECT by ti měl stačit na všechna požadovaná data z DB.
A chybí ti tam definice prázdného pole na začátku skriptu, tedy
$datum1=array();
Nějak jsem to přehlédl. Divím se, že to funguje. To je hrozné, co PHP snese.