Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
#1 · Zasláno: 12. 1. 2020, 17:29:55
Zdravim,
mam po case problem pri ziskavani dat z DB podla rokov... Podmienku roka ziskavam z formularu ako $_GET['rok'] a neskor v kode by som si ho rad dal do podmienky pri vybere z DB cez implode()... ?rok%5B%5D=2020&rok%5B%5D=2019 $rok .= '(YEAR(FROM_UNIXTIME(start_datum)) = ' . implode(' OR YEAR(FROM_UNIXTIME(start_datum)) = ', $_GET['rok']) . ')'; $result_inventura = $conn->query(" SELECT * FROM stat_inventura WHERE id_material = ".$row['id_material']." AND $rok "); Samozrejme je to cez ARRAY, takze v premenej $_GET['rok'] je hodnota ARRAY ak by som ju vypisal Vypis chyby: Warning: mysqli_query() expects parameter 2 to be string, object given in on line 210 Recoverable fatal error: Object of class mysqli_result could not be converted to string in on line 211 Ako docielit toho aby mi ten array ukazoval cisla, aby mi to do funkcie vypisovala ten rok 2019 ci 2020 or vsetky PS: kod vyssie mi funguje v inej casti stranky, kde je hodnota roka dana ako rok=2019 ( cize cez httacess /rok/2020/ pekne adresy ) ale tam moze byt vzdy len jeden rok urceny... Diky |
||
Andrej.B Profil |
#2 · Zasláno: 12. 1. 2020, 18:44:29
som si dal echo na $rok... ukazovalo uplne zly...
malo byt s AND... $rok4 .= 'AND (YEAR(FROM_UNIXTIME(start_datum)) = ' . implode(' OR YEAR(FROM_UNIXTIME(start_datum)) = ', $_GET['rok']) . ')'; a potom pri selecte do DB bez AND... Takto mi to pri viac ako jednom cykle davalo AND AND bla bla.. uf... Je nejaka moznost si ukazat presny dotaz do DB? pri echo ci print $result_inventura vyhodi chybu... ako si to uzkazat a by clovek vedel presne co mu tam ide? akoze by tam videl: SELECT * FROM stat_inventura WHERE id_material = 2 AND YEAR(FROM_UNIXTIME(start_datum)) = 2019 diky |
||
lionel messi Profil |
Andrej.B:
„Je nejaka moznost si ukazat presny dotaz do DB?“ Áno, je: $sql = "SELECT * FROM stat_inventura WHERE id_material = 2"; //začneme skladať dotaz //niekde nižšie si vytvoríš výpis premenlivej časti dotazu, povedzme, že si ju uložíš do premennej $rok $sql .= $rok; //spojíme "statickú" a "dynamickú" časť dotazu echo $sql; //vypíšeme dotaz $result_inventura = $conn->query($sql); //vykonáme dotaz, ktorý predáme metóde query ako parameter „pri echo ci print $result_inventura vyhodi chybu...“ Lebo do premennej $result_inventura priraďuješ návratovú hodnotu metódy query, čiže objekt (inštanciu triedy mysqli_result, ktorá nemá definovanú __toString magickú metódu, preto sa výpis skončí chybovou hláškou - mimochodom, dotaz by si v nej ani tak nenašiel). |
||
Kajman Profil |
#4 · Zasláno: 13. 1. 2020, 14:30:23
YEAR(FROM_UNIXTIME(start_datum)) = 2019 bude většinou pomalejší (při větším počtu let a indexu nad sloupcem start_datum i výrazně) než start_datum BETWEEN UNIX_TIMESTAMP('2019-01-01 00:00:00') AND UNIX_TIMESTAMP('2019-12-31 23:59:59') |
||
Andrej.B Profil |
#5 · Zasláno: 15. 1. 2020, 15:52:12
lionel messi:
diky vyskusam... Obcas sa hodi, ze ako je vlastne cely dotaz poskladany... Kajman: nemam tam toho vela, zatial 3 roky inventur, cca 100 poloziek v kazdej... Ak by som zacal pouzivat BETWEEN na datum, napriklad pri vyhladavani, bolo by nieco treba prerabat, ked mam v DB datumy vsade ako timestamp "1579099339", ci by len stacilo v php pri pokladani dotazu na DB formatovat datu a cas na ten ako je v priklade od Vas? Pouzivam rovnako YEAR/day,month/(FROM_UNIXTIME(datum)) aj inde v aplikacii, pri odvadzani vyroby hotovych vyrobkov a tam uz teraz mame za posledny rok cca 8000 zaznamov, ale je to pouzivane vzdy len jednym uzivatelom. |
||
Časová prodleva: 4 roky
|
0