PDA

View Full Version : مشکل با تاریخ فارسی در mysql



arenaw
یک شنبه 09 تیر 1392, 16:02 عصر
سلام
من تو صفحه ام نیاز دارم که تاریخ رو به صورت فارسی نشون بده و استاندارد اس کیو ال اینه که تاریخ رو میلادی توش ذخیره کنی.
تا اینجایی که رکوردهایی که میخوام و بگیرمو تاریخ میلادیشونو تبدیل فارسی کنم و یا موقع اینسرت برعکس این کارو انجام بدم مشکلی ندارم.

الان من میخوام از GROUP BY استفاده کنیم و تعداد رکوردهای داخل هر ماه فارسی رو داشته باشم. خب اگه مشکل فارسی بودن رو نداشتم اینکارو میکردم:

SELECT COUNT(*) FROM ... WHERE ... GROUP BY MONTH(field_time);


ولی الان نمیشه این کارو کنم چون مثلا اول اکتبر درست اول مهر نیست...
البته غیر ممکن نیست، میشه با پی اچ پی اول و آخر هر ماه فارسی رو به میلادی در بیارم و کانت رکوردهای بینشونو بگیرم، ولی مشکل من اینه که اینه که وقتی بازه زمانی اولین رکورد تا آخرین رکورد زیاد بشه مثلا 10 ماه، باید 10 تا کوئری اجرا کنم!

چه راهه استانداردی پیشنهاد میکنید؟
امیدوارم متوجه شده باشید منظورمو.

MMSHFE
یک شنبه 09 تیر 1392, 16:10 عصر
بهترین راه اینه که زمان رو بصورت timestamp توی دیتابیس ذخیره کنید و موقع کوئری گرفتن، زمان شروع و پایان ماه رو تبدیل به timestamp کنید و اگه با between رکوردهایی رو که بین این دو عدد هست، استخراج کنید.

arenaw
یک شنبه 09 تیر 1392, 16:14 عصر
بهترین راه اینه که زمان رو بصورت timestamp توی دیتابیس ذخیره کنید و موقع کوئری گرفتن، زمان شروع و پایان ماه رو تبدیل به timestamp کنید و اگه با between رکوردهایی رو که بین این دو عدد هست، استخراج کنید.
من الان میخوام:
تعداد رکورد های هر ماه رو از دیتا بیس با یک کوئری توی یک ویو (خروجی) بگیرم. اینطوری:
ماه . تعداد
مهر . 17
آبان . 11
آذر . 13
....

این کاری که شما گفتید میشه تعداد رکوردهای یک بازه زمانی رو به دست آورد. مثلا رکوردهای بین تایمستمپ اول مهر تا تایمستمپ آخر مهر و گروپ بای معنی نداره دیگه

MMSHFE
یک شنبه 09 تیر 1392, 16:23 عصر
require_once 'jdf.php';
date_default_timezone_set('Asia/Tehran');
$y = '1391';
$month = range(1, 12);
$counts = array();
foreach($month as $m) {
$start = jmktime(0, 0, 0, $m, 1, $y);
if($m == 12) {
$y++;
$m = 0;
}
$end = jmktime(0, 0, 0, $m + 1, $y) - 1;
$result = mysql_query("SELECT COUNT(*) AS `total` FROM `table` WHERE (`ts` BETWEEN {$start} AND {$end})");
if(count($result) > 0) {
$counts[] = $result[0]['total'];
}
}
echo '<pre>' . print_r($result, true) . '</pre>' . PHP_EOL;