Elvis L Posted December 29, 2014 Report Share Posted December 29, 2014 Sveiki, Lieta sekojoša. Datubāzē man glabājas ieraksti, kuram katram ir savs datums unix timestamp, kas satur arī pilnu datumu tai skaitā stundas, minūtes un sekundes. Kāds būtu pareizs select, lai izvēlētos kādu noteiktu dienu, pašlaik ievadot 12/12/2014 => $datepicker = strtotime($_POST['datepicker']); šis pārveidot uz unix , bet pēc WHERE DAT LIKE "$datepicker"% neatrod, jo cik es noprotu, viņš meklē arī stundas, bet vajag tikai attiecīgo dienu. Gaidu Jūsu ieteikumus, paldies! Quote Link to comment Share on other sites More sharing options...
briedis Posted December 29, 2014 Report Share Posted December 29, 2014 SELECT WHERE DATE(datuma_kolonna) = 2014-12-29 Quote Link to comment Share on other sites More sharing options...
Elvis L Posted December 29, 2014 Author Report Share Posted December 29, 2014 (edited) Šajā gadījumā nesanāk, ka datuma kollona ir apmēram šāda 2014-12-29 14:14:14 ? Respektīvi nevajadzētu būt kaut kā šādi? WHERE DATE(datuma tabula,yy-mm-dd) ='2014-12-29' ? Edited December 29, 2014 by Elvis L Quote Link to comment Share on other sites More sharing options...
F3llony Posted December 29, 2014 Report Share Posted December 29, 2014 SELECT WHERE DATE(datuma_kolonna) = 2014-12-29 NEKAD šādi nedari. Šeit date tiks aprēķināts visām kolonnām, arī tām, kas neatbilst un nevarēsi izmantot indeksu. [...] WHERE `date` BETWEEN '2014-12-29 00:00:00' AND '2014-12-29 23:59:59' Vēl daži do's and dont's: MySQL datumus un datumu laiku glabā nevis kā skaitli, bet kā DATE vai DATETIME. No POST/GET formas saņemto vērtību pārsē nevis ar strtotime, bet ar DateTime PHP klasi. strtotime pārvērš ievadīto datumu unix timestamp, kas ir skaitliska vērtība - 1234567890. Loģiski, ja datubāzē datums ir formātā '2014-12-29 11:10:01' un tu select šādu strtotime vērtību, tad LIKE sanāk %1234567890% kas nekad neatbildīs. Pareizi ir $date = new DateTime('2014-12-29'); $from = $date->format('Y-m-d 00:00:00'); $to = $date->format('Y-m-d 23:59:59'); [...] WHERE `date` BETWEEN '$from' AND '$to' // also, izmanto PDO/MySQLi un :params Quote Link to comment Share on other sites More sharing options...
Elvis L Posted December 29, 2014 Author Report Share Posted December 29, 2014 (edited) Paldies, from, to atlasa ideāli 2014-12-29 00:00:002014-12-29 23:59:59 Bet paliek vēl viena problēma 'date' ir unixcode, kā es viņu WHERE `date` BETWEEN '$from' AND '$to' šajā vietā varu pārveidot uz tādu pašu formātu kā $from un $to ? Sanāk ka viņš meklēs starp no 2014-12-29 00:00:00 līdz 2014-12-29 23:59:59 Laigan datums patiesībā ir (piem: 1416555418) Yo manu iekš DAT ieraksti tiek veikti ar esošo datumu time(); Edited December 29, 2014 by Elvis L Quote Link to comment Share on other sites More sharing options...
F3llony Posted December 29, 2014 Report Share Posted December 29, 2014 Kā jau minēju, nevajag datubāzē glabāt datumu kā unix time skaitli. Pārtaisi tabulu lai izmanto DATETIME kolonnas tipu un ierakstu veic izmantojot nevis time() bet MySQL NOW(), piemēram, INSERT INTO tabula SET [...], `date` = NOW(); Quote Link to comment Share on other sites More sharing options...
Elvis L Posted December 29, 2014 Author Report Share Posted December 29, 2014 Sapratu, paldies par palīdzību! Quote Link to comment Share on other sites More sharing options...
briedis Posted December 29, 2014 Report Share Posted December 29, 2014 NEKAD šādi nedari. Šeit date tiks aprēķināts visām kolonnām, arī tām, kas neatbilst un nevarēsi izmantot indeksu. Domā viņam ir indekss datumam? Domā, ka viņam ir simtiem tūkstošu ierakstu? Domā, ka viņš vispār kādreiz ir izmantojis EXPLAIN? Quote Link to comment Share on other sites More sharing options...
F3llony Posted December 29, 2014 Report Share Posted December 29, 2014 Domā viņam ir indekss datumam? Domā, ka viņam ir simtiem tūkstošu ierakstu? Domā, ka viņš vispār kādreiz ir izmantojis EXPLAIN? Domā, ka ja viņam tur ir bardaks arī ieteikumam ir jābūt tik pat lielam bardakam? Tādā veidā jams toč neko neiemācīsies. Quote Link to comment Share on other sites More sharing options...
qwerty Posted December 29, 2014 Report Share Posted December 29, 2014 Ko tad, ja viņa laiki nāk no dažādām laika zonām, piemēram, Džakartas un Latvijas? Quote Link to comment Share on other sites More sharing options...
F3llony Posted December 29, 2014 Report Share Posted December 29, 2014 (edited) Ko tad, ja viņa laiki nāk no dažādām laika zonām, piemēram, Džakartas un Latvijas? Datubāzē nekad neglabā laiku N laika zonās, izvēlas pamata (piem. GMT+0) un tajā arī glabā. Laika zonas rēķina pie prezentācijas un datu saņemšanas relatīvi pamata laika zonai, ja vispār ir tāda nepieciešamība. Normālā gadījumā pie datu saņemšanas izmanto aplikācijas vienoto laiku, e.g. to laika zonu, kurā darbojas visas sistēmas un ja nepieciešams, laika izvadi koriģē tikai pie prezentācijas. Jebkurā gadījumā, unixtime nekādā veidā neatrisina, vienkārši unixtime vienmēr izmanto UTC. Noskaties šo - https://www.youtube.com/watch?v=-5wpm-gesOY also MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.) By default, the current time zone for each connection is the server's time. The time zone can be set on a per-connection basis. As long as the time zone setting remains constant, you get back the same value you store. If you store a TIMESTAMP value, and then change the time zone and retrieve the value, the retrieved value is different from the value you stored. This occurs because the same time zone was not used for conversion in both directions. The current time zone is available as the value of the time_zone system variable. http://dev.mysql.com/doc/refman/5.6/en/datetime.html Edited December 29, 2014 by F3llony Quote Link to comment Share on other sites More sharing options...
Kavacky Posted December 29, 2014 Report Share Posted December 29, 2014 (edited) Timestampam laika zonas nav. Edited December 29, 2014 by Kavacky Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.