| Autor | Zpráva | ||
|---|---|---|---|
| jtfcobra Profil |
#1 · Zasláno: 11. 10. 2016, 10:15:50
První a poslední záznam každého dne? vypsat najednou
Příklad 10:00 hodnota XXX // Zacatek 22:00 hodnota XXX // Konec (jinak mezitim je nezpocet zaznamu) $mesic= $_GET["mesic"];
$rok=$_GET["rok"];
$den=$_GET["den"];
if ($rok=='15') {$rok='2015';};
if ($rok=='16') {$rok='2016';};
if ($rok=='17') {$rok='2017';};
if ($rok=='18') {$rok='2018';};
if ($_GET["mesic"]=='') {$mesic=Date("m");};
if ($_GET["rok"]=='') {$rok='20'.Date("y");};
if ($_GET["den"]=='') {$den=Date("d");};
$db = mysql_connect($hostname_test, $username_test, $password_test);
mysql_select_db($database_test,$db);
$vybranyzarizeni= $_GET["zkratka"];
$nastaveni='0';
$result = mysql_query("SELECT * FROM d136223_pilat.data where MONTH(datum) ='$mesic' and zapinani='$nastaveni' and YEAR(datum) = '$rok' and zarizeni='$vybranyzarizeni' order by cas asc",$db); |
||
| Kajman Profil |
Mohlo by jít něco jako
SELECT d.* FROM (SELECT datum, Min(cas) mincas, Max(cas) maxcas FROM d136223_pilat.data dm WHERE datum BETWEEN '2016-07-01' AND '2016-07-31' AND zapinani=1 AND zarizeni='ZKRATKA' GROUP BY datum) minmax JOIN d136223_pilat.data d ON d.datum=minmax.datum AND d.cas IN (minmax.mincas, minmax.maxcas) WHERE d.zapinani=1 AND d.zarizeni='ZKRATKA' ORDER BY datum, cas A php kód máte náchylný na sql injection. |
||
| smitka Profil |
Pokud se záznamy vkládají postupně a zvyšuje se jim nějaké ID, tak jej šlo využít:
SELECT * FROM <tabulka> WHERE <id> in ((SELECT MAX(<id>) FROM <tabulka> WHERE <datum> BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd'), (SELECT MIN(<id>) FROM <tabulka> WHERE <datum> BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd')) Pokud jistota s ID není, tak lze použít řazení: SELECT * FROM <tabulka> WHERE <id> in ((SELECT <id> FROM <tabulka> WHERE <datum> BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd' ORDER BY <datum> DESC LIMIT 1), (SELECT <id> FROM <tabulka> WHERE <datum> BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd' ORDER BY <datum> ASC LIMIT 1)) Na sloupci s datumem by měl být index, aby se s ním rychleji pracovalo. |
||
| Kajman Profil |
#4 · Zasláno: 11. 10. 2016, 22:55:46
smitka:
Pokud by se hledalo min a max na celém intervalu, tak přece stačí dva dotazy s order by a limit. Ty se dají spojit unionem a poddotazy netřeba. Přišlo mi, že v měsíci hledá min a max pro každý den. |
||
| smitka Profil |
#5 · Zasláno: 11. 10. 2016, 23:10:08
Kajman:
S tím unionem máš pravdu, já ho nerad používám, tak sem si na něj ani nevzpomněl :-) Pokud je cílem najednou vypsat min a max pro všechny dny najednou, tak se to docela komplikuje a osobně bych to řešil až na aplikační úrovni, ale si by také šlo použít řešení s unionem - groupnout maxima dle dne a spojit to s minimama dle dne. |
||
| Keeehi Profil |
#6 · Zasláno: 12. 10. 2016, 00:49:10
smitka:
A nebo bez UNIONU tak, jak to napsal Kajman v [#2]. |
||
|
Časová prodleva: 5 dní
|
|||
| jtfcobra Profil |
#7 · Zasláno: 17. 10. 2016, 11:40:49
Kdyz zkousim tohle tak to nejde
<?php
$mesic= $_GET["mesic"];
$rok=$_GET["rok"];
$den=$_GET["den"];
if ($rok=='15') {$rok='2015';};
if ($rok=='16') {$rok='2016';};
if ($rok=='17') {$rok='2017';};
if ($rok=='18') {$rok='2018';};
if ($_GET["mesic"]=='') {$mesic=Date("m");};
if ($_GET["rok"]=='') {$rok='20'.Date("y");};
if ($_GET["den"]=='') {$den=Date("d");};
$db = mysql_connect($hostname_test, $username_test, $password_test);
mysql_select_db($database_test,$db);
$vybranyzarizeni= $_GET["zkratka"];/// and DAY(datum) = '$den'
$nastaveni='0';
$result = mysql_query("SELECT id FROM 136223_pilat.data WHERE id in ((SELECT id FROM <tabulka> WHERE datum BETWEEN '2016-07-01' AND '2016-07-20' ORDER BY datum DESC LIMIT 1), (SELECT id FROM 136223_pilat.data WHERE datum BETWEEN '2016-07-01' AND '2016-07-20' ORDER BY datum ASC LIMIT 1))",$db);
// Zaloha
//$result = mysql_query("SELECT * FROM d136223_pilat.data where MONTH(datum) ='$mesic' and zapinani='$nastaveni' and YEAR(datum) = '$rok' and zarizeni='$vybranyzarizeni' order by datum,cas asc",$db);
// Zaloha
$radku = mysql_num_rows($result);
printf("<table border=0 width=350px align='center'>\n<tr>\n");
printf("<td></td><td></td></tr>\n");
printf("<td bgcolor='#FF9900'><font color='black'>Datum</td><td bgcolor='#FF9900'><font color='black'>Cas</td><td bgcolor='#FF9900'><font color='black'>Teplota</td><td bgcolor='#FF9900'><font color='black'>Podtlak</td><td bgcolor='#FF9900'><font color='black'>Teplota venkovni</td></td><td bgcolor='#FF9900'><font color='black'>Spotreba</td></td><td bgcolor='#FF9900'><font color='black'>Zapinani</td></tr>\n");
for($i=0;$i<$radku;$i++)
{
if (mysql_result($result,$i,"datum")==$datum)
{
printf("<td bgcolor='#FFEFD5'><font color='black'> %s</font></td>\n",
mysql_result($result,$i,"datum"));
printf("<td bgcolor='#FFEFD5'><font color='black'> %s</font></td>\n",
mysql_result($result,$i,"cas"));
printf("<td bgcolor='#FFDAB9'><font color='black'> %s</font></td>\n",
mysql_result($result,$i,"teplota"));
printf("<td bgcolor='#FFEFD5'><font color='black'>- %s</font></td>\n",
mysql_result($result,$i,"podtlak"));
printf("<td bgcolor='#FFDAB9'><font color='black'> %s</font></td>\n",
mysql_result($result,$i,"teplotav"));
printf("<td bgcolor='#FFEFD5'><font color='black'> %s kw</font></td>\n",
mysql_result($result,$i,"spotreba"));
printf("<td bgcolor='#FFDAB9'><font color='black'> %s</font></td></tr>\n",
mysql_result($result,$i,"zapinani"));
}
}
mysql_close($db);
printf("<td></td><td></td></tr>\n");
?> |
||
|
Časová prodleva: 9 let
|
|||
0