Autor Zpráva
Andrej.B
Profil
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
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
atd

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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0