Conversie data din coloana tip Varchar in mysql
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
andras
- Mesaje:430
Conversie data din coloana tip Varchar in mysql
Salut,
Vreau sa fac in BD un filtru care nu-mi iese. In BD am cimpuri:
Cod: Selectaţi tot
sisdata (varchar 30) - este incarcat cu valoarea timestamp() in momentul incarcarii (ex. 2013-06-08 17:38:18)
pn (varchar, 200)
denumire (varchar, 200)
In php am:
Cod: Selectaţi tot
$data= date('Y-m-d');
$dataveche=date('Y-m-d', strtotime($data. ' - 14 month')); // valoarea filtru, in cazul nostru 2014-04 -10
Am dat:
Cod: Selectaţi tot
SELECT DISTINCT pn, denumire from pozitii
WHERE DATE(sisdata)>=".$dataveche." AND (pn LIKE "."'%".$pn."%' AND denumire LIKE "."'%".$den."%')
dar in query imi scoate si pozitiile cu date(sisdata) anterioare valorii filtrului (adica imi preia si o pozitie incarcata in anul 2013)
Unde am gresit? Multumesc.
- Completare: si in PhpMyAdmin tot asa preia, cu date anterioare. Cimpul sisdata este cimp de rezerva, eu il folosesc numai pentru trasabilitatea produsului, de asta l-am pus varchar iar acum e greu sa modific BD.
MarPlo
Mesaje:4343
Salut
Incearca sa faci verificarea datei transformata in Unix Timestamp.
Codul ar fi asa:
Cod: Selectaţi tot
$dataveche = strtotime('-14 month');
$sql = "SELECT DISTINCT pn, denumire from pozitii
WHERE UNIX_TIMESTAMP(sisdata) >= ". $dataveche ." AND (pn LIKE "."'%".$pn."%' AND denumire LIKE "."'%".$den."%')";
andras
Mesaje:430
In PhpMyAdmin apare tot asa cu date anterioare, in aplicatie n-am mai verificat. Mai cautam, poate ne dumirim.
Am incercat si cu:
Cod: Selectaţi tot
SELECT DISTINCT pn, denumire from pozitii
WHERE str_to_date(sisdata, '%Y-%m-%d') >= ". $dataveche ." AND (pn LIKE "."'%".$pn."%' AND denumire LIKE "."'%".$den."%')
Tot asa preia cu date anterioare.
Daca nu reusim va trebui sa schimb query-ul (eventual sa modific BD), problema e ca nu stiu de ce apare asa. Multumesc oricum.
MarPlo
Mesaje:4343
Daca faci comparatia /conditia ">=" intre numere, ar trebui sa functioneze. Ambele valori comparate sa fie numere Timestamp (nu data tip string). Iar asta se obtine cu UNIX_TIMESTAMP(coloana) pentru data din mysql, si cu; strtotime('-14 month') pentru valoarea din php.
andras
Mesaje:430
Exact asa am pus in aplicatie. Eu folosesc acest filtru pentru cautarea unor pozitii incarcate in ultimele 14 luni, cu ideea de a prelua PN si DENUMIRE cind incarc pozitii noi care se repeta.
MarPlo
Mesaje:4343
Poate ca problema e de la valoarea returnata de strtotime(). Da un "echo" la interogarea $sql sa vezi ce sir e trimis la mysql.
Eventual incearca si asa, fara strtotime().
Cod: Selectaţi tot
$sql = "SELECT DISTINCT pn, denumire from pozitii
WHERE UNIX_TIMESTAMP(sisdata) >= UNIX_TIMESTAMP((NOW() - INTERVAL 14 MONTH)) AND (pn LIKE "."'%".$pn."%' AND denumire LIKE "."'%".$den."%')";
andras
Mesaje:430
Acum functioneaza corect. Deci asta era, nu-i placea $dataveche. Multumesc mult MarPlo, problema rezolvata.
Subiecte similare
- Afisare numar cel mai mare dintr o coloana
PHP - MySQL - XML
Primul mesaj
Bună Marplo
Vreau să extrag din coloan pret cel mai mare numar ca de exemplu 4444.
Mie imi afisează 54 în loc de 4444, dacă în loc de 4444 modific...
Ultimul mesaj
Am schimbat `pret` varchar(20) DEFAULT NULL in `pret` int(11) NOT NULL ca la tine si merge.
Multumesc