Jump to content
php.lv forumi

Select un date formāts


Elvis L

Recommended Posts

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!

Link to comment
Share on other sites

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
Link to comment
Share on other sites

Paldies, from, to atlasa ideāli

2014-12-29 00:00:00
2014-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 by Elvis L
Link to comment
Share on other sites

 

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by F3llony
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...