توابع تاریخ شمسی جهت استفاده در Mysql
این پروژه رو تقدیم می کنم به سازمان مدیریت برنامه نویسان php
در تمامی پروژه ها یی که نیاز به تاریخ شمسی هست. برنامه نویسان با مشکلات خاصی ربرو هستند. در خیلی از تالار های گفتگو بارها و بارها خوندم که برای ذخیره تاریخ و محاسبات دقیق تر بر روی فیلد هایی که نوع انها تاریخ هست. بهتر هست تاریخ رو به صورت میلادی و به صورت timestamp نگهداری کنیم.خوب این روش بسیار کار آمد هست و بهینه . زیرا میتونیم با داشتن یک تاریخ میلادی ، تمامی تاریخ های دیگر همچون شمسی و قمری را استخراج کنیم. اما این روش معایب خودش رو همراه داره.این معایب رو با بیان یک مثال بررسی می کنم:
در Mysql توابع بسیار قدرتمند و مهمی برای کار با مقادیر نوع تاریخ و زمان وجود دارد. که برنامه نویس میتواند بدون درگیر شدن با کد نویسی و با استفاده از یک دستور در خط کوئری خود به نتیجه دلخواه خودش برسه. به عنوان مثال فرض کنید. میخواهیم یک آرشیو ماهیانه برای سیستم خبری ایجاد کنیم.
SELECT month(FROM_UNIX(regdate) as mo, SELECT year(FROM_UNIX(regdate) as yr, COUNT(*) as total FROM table GROUP BY mo,yr ORDER BY mo DESC yr DESC
برنامه نویس با مثال بالا به راحتی می تواند آرشیو ماهیانه مطالب سیستم خود را ایجاد کند. البته به میلادی.
اما برای آرشیو ماهیانه شمسی آیا جواب گو هست. جواب این هست. خیر!!!.
برای این خواسته برنامه نوبسان روش های متنوعه ای رو بسته به نیاز خود به اجرا میگزارند. عده ای یک فیلد با جدول خود اضافه می کنند و مقادیر تاریخ شمسی را درج می کنند.عده ای دیگر می یایند تاریخ شروع مطالب . تاریخ پایانی رو پیدا میکنند. و بعد از تجزیه و تحلیل کردن آرشیو ماهانه را استخراج می کنند.تمامی روش های موجود دارای پردازش کم و بیش بالایی هستند. تا به نتیجه دلخواه برسند.
من در این پروژه با استفاده از قابلیت تعریف پروسیجر و تابع که در نسخه ۵.x.x به بعد ارائه شد. یک سری تابع ، همانند توابع MySql شبیه سازی کردم با این تفاوت که این توابع نتیجه را به صورت شمسی بر میگردانند.
در این پروژه ۴ تا بع کاربردی date(),month(),year(), monthname() شبیه سازی شده.
برای استفاده از این توابع شما کافیست مراحل زیر را انجام بدید.
۱- دریافت فایل توابع : دریافت
۲- ایپورت کردن فایل در دیتابیس مورد نظر
بعد از انجام مراحل بالا برای تست توابع می تونید. از این کوئری برای تست استفاده کنید.
SELECT pnum(pdate(NOW())),pyear('2009-09-22'),pmonth('2009-09-22') , pmonthname( NOW());
مثال آرشیو ماهیانه
SELECT pmonth(FROM_UNIX(regdate) as mo, SELECT pyear(FROM_UNIX(regdate) as yr, COUNT(*) as total FROM table GROUP BY mo,yr ORDER BY mo DESC yr DESC
اگر نتیجه گرفتید. پس براحتی می توانید از این توابع کمال استفاده را ببرید.
نکته : در حال حاضر فقط می توان این توابع را از نسخه ۵.۱.به بالا استفاده کرد
لطفا نظرات و پیشنهادات خود را جهت کامل کردن این توابع در قسمت کامنت قرار بدید.
تلاش علمی – عملی شما به همراه آزاد اندیشی فکری شما برای در اختیار قرار حاصل تلاش خود در اختیار دیگر عزیزان قابل تقدیره.
صمیمانه از شما تشکر می کنم و براتون آزروی موفقیت دارم
با احترام
مخلصی
ممنونم، خیلی بدرد بخوره! راستی چه عجب آپ کردی!!! خیلی وقت بود منتظر بودم!
مثل همیشه قابل تقدیر و فوقالعاده.
ممنون صالح جان
خیلی عالیه
دستتون درد نکنه
امیدوارم همیشه موفق باشید
عالیه صالح جان، مرسی واقعا
خیلی عالی است
برای نسخه ۵ اگر بود ، خیلی بهتر می شد :دی
خیلی عالی بود. مرسی. کمک بزرگی کردید.
ممنونم به خاطر زحمتی که کشیدید
سلام و خسته نباشید
مطلب جالبی بود … یک برنامه نویس حالیش نمیشه چه سوالی رو کجا بپرسه …
من میخواستم واسه نرم افزار(حسابداری) که خودم دارم مینویسم دیتابیس طراحی کنم برنامم رو تو visual Studio 2008 به زبان C# نوشتم آیا برای طراحی دیتابیس از Sql Server خود ویژال استفاده کنم به مشکل و محدودیتی بر نمیخورم مثل بک آپ گیری و … ؟ اگر این امکان وجود نداره از کدام ورژن Sql Server استفاده کنم؟
چه تفاوتی میکنه که دیتابیس رو تو خود ویژال یا جداگانه در SQl Serverطراحی کنیم؟
@اوژن استوار
ممنون دوست عزیز
در جواب سوال شما باید خدمتتون عرض کنم که بنده برنامه نویس وب هستم. با زبان پی اچ پی کار میکنم. و کلا با محصولات ماکروسافتی میانه خوبی ندارم.
اما میتونم یک پاسخ خدمتتون بدم. اون هم این هست. که این گونه ابزار های برای ایجاد پل ارتباطی بین شمای کد نویس و سرویس دهنده شما هست. و قالبا به صورت ویزاردی ایجاد میشوند تا به روند کار شما سرعت ببخشند.
من چند سالی هست که قیافه ویژاول استدیو رو ندیدم. اما تا اونجا که یادم هست. اونچه مورد نیاز شما هست رو جواب گو هست. اما اگر به دنبال کار حرفه با mssql هستید. بهتره از خود SQL Server Management Studio استفاده کنید.
بنظرم بهتره به جای استفاده از این توابع sql از توابع تبدیل تاریخ در خود php استفاده کنیم. چون در آرشیو ماهانه، مهم ماه ارسال مطلب هست،
در اینجا ممکن است نتیجه چندماه یکسان باشند که با array_unique() تکراری ها رو حذف می کنیم و پس از آن آرایه رو برای چند روز کش می کنیم و در هنگام درخواست از کش که بصورت آرایه سریال ذخیره شده استفاده می کنیم. مثل وردپرس که تقریبا هر ۲ روز کش می کنه
با سلام و خسته نباشید
از اینکه جواب دادید ممنونم … مشکلم رو با سرچ و پرس و جو حل کردم …
من تازه زبان پی اچ پی رو شروع کردم مطالب شما رو دنبال خواهم کرد
جالب بود ممنون
موفق و پیروز باشید