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: 8 let
|
0