PDA

View Full Version : مرتب سازی بر اساس تاریخ



olampiad
چهارشنبه 04 آذر 1394, 19:54 عصر
سلام و خسته نباشید به دوستان عزیز
به این مقادیر ی نگا بندازید.
1389/6/10
1387/7/13
1391/3/20
1393/9/1
1389/7/22
1391/1/17
1394/10/11

اینا مثادیر یکی از فیلد های من به اسم zaman هستش.
من میخوام هنگام جستجو بر اساس این فیلد جستجو انجام بده و از تاریخ قدیمی به جدید مرتب کنه.
آیا برای این کار کوئری وجود داره یا باید بعد از جستجو مرتب کنم؟
میشه یه راه حل ساده ای بگید.
ممنون

hamedarian2009
چهارشنبه 04 آذر 1394, 23:19 عصر
خب از order by استفاده کن

SELECT * FROM `tbl_name` ORDER BY `zaman` ASC;

Unique
پنج شنبه 05 آذر 1394, 02:50 صبح
خب از order by استفاده کن
چون توی تاریخ روز و ماه را با leading zero ثبت نکرده نمیسه از order by استفاده کرد مثلا ۱۳۹۴/۱/۱ زودتر از ۱۳۸۹/۰۶/۳۱ میاد !


میشه یه راه حل ساده ای بگید.
تنها راه حلی که این موقع شب به ذهنم میرسه اینه که یک تابع بنویسیم توی mysql و توی order by صداش بزنیم و مقادیر را درستشون کنیم یعنی leading zero بگذاریم.


select * from table order by fixed_fadate(date_field)

us1234
پنج شنبه 05 آذر 1394, 09:57 صبح
همیشه تاکید میکنم که تاریخ و ساعت باید timeStamp باشد بخاطر بروز همچین مشکلاتی است !
البته این فقط یک نمونه ساده است وقتی بخواهید بازه زمانی مشخص کنید مثلا بگید از 1 هفته پیش تا امروز یا مثلا بگید از 1/1/1390 الی 1/1/1394 اونجاست که به عمق فاجعه پی میبرید !

الان هم به نظر من یک تابع بنویسد که کلیه تاریخ ها را اول به میلادی و بعد هم به timeStamp تبدیل کند و در دیتابیس ذخیره کنید .

پ ن : برای تبدیل از کلاس jdf.php و متد jalali_to_gregorian کمک بگیرید .

hamedarian2009
پنج شنبه 05 آذر 1394, 10:28 صبح
چون توی تاریخ روز و ماه را با leading zero ثبت نکرده نمیسه از order by استفاده کرد مثلا ۱۳۹۴/۱/۱ زودتر از ۱۳۸۹/۰۶/۳۱ میاد !
اگه به همین فرمی که ایشون گزاشتن باشه هیچ مشکلی پیش نمیاد مگر اینکه به این صورت هم رکوردی درج کنند البته نباید هرجوری که کاربر نوشت داده رو درج کنه بلکه باید یکسری کنترلهایی روش داشته باشه

Unique
پنج شنبه 05 آذر 1394, 13:13 عصر
اگه به همین فرمی که ایشون گزاشتن باشه هیچ مشکلی پیش نمیاد
درسته ، من حواسم نبود Slash داره. توی برنامه های قدیمی از همین روش استفاده میکردم اما یک عدد ثبت میکردم و فکرم رفت دنبال leading zero. همین شکلی باشه و فرمش دقیقا همین باشه جواب میده و حرف شما درسته.


همیشه تاکید میکنم که تاریخ و ساعت باید timeStamp باشد بخاطر بروز همچین مشکلاتی است !
بعضی مواقع با Data ی کار داری که داره با یک برنامه دیگه هم کار میکنه و نمیتونی توش دست ببری. این روش هم با وجود مشکلاتش خیلی مرسومه اما تاریخ را عددی با leading zero و بدون Slash مثلا 13940905 ذخیره میکنن. اینطوری راحت میشه فاصله ها را اعمال کرد. مشکل وقتی پیش میاد که مثلا بخوای توی بازه تاریخ روز های دوشنبه یا روز دوم آخرین هفته هر ماه را در بیاری.

us1234
پنج شنبه 05 آذر 1394, 14:06 عصر
د
بعضی مواقع با Data ی کار داری که داره با یک برنامه دیگه هم کار میکنه و نمیتونی توش دست ببری. این روش هم با وجود مشکلاتش خیلی مرسومه اما تاریخ را عددی با leading zero و بدون Slash مثلا 13940905 ذخیره میکنن. اینطوری راحت میشه فاصله ها را اعمال کرد. مشکل وقتی پیش میاد که مثلا بخوای توی بازه تاریخ روز های دوشنبه یا روز دوم آخرین هفته هر ماه را در بیاری.

حتی اگر data از جای دیگر اومده باشه ، ترجیح میدهم با فرمت خودم (timeStamp) ذخیره کنم و حتی اگر جای دیگه ای فرمت خاصی ازم خواست ، تاریخ را به فرمت درخواستی تبدیل میکنم و تحویل میدهم ، هیچ اجباری نیست که چون یک منبع تاریخ با فرمت خاص به من میده من همان فرمت را ذخیره کنم !

Unique
جمعه 06 آذر 1394, 03:09 صبح
هیچ اجباری نیست که چون یک منبع تاریخ با فرمت خاص به من میده من همان فرمت را ذخیره کنم !
متوجه نیستی ! ببین مثلا بهت میگن بشین روی پایگاه داده نرم افزار بیمه تحت داس که روی جداول فاکس پرو هستش و تاریخ به این صورت ذخیره شده یکسری گزارش و خروجی با php بنویس ! شما نه میتونی اون جداول را تغییر بدی چون اونوقت نرم افزار نمیتونه باهاش کار کنه و نه منطقیه بیای هر بار کل اطلاعات یا اطلاعات جدید را به روز کنی. خوب مجبوری با این شیوه عمل کنی دیگه ، لجبازی نداره.

us1234
جمعه 06 آذر 1394, 09:31 صبح
متوجه نیستی ! ببین مثلا بهت میگن بشین روی پایگاه داده نرم افزار بیمه تحت داس که روی جداول فاکس پرو هستش و تاریخ به این صورت ذخیره شده یکسری گزارش و خروجی با php بنویس ! شما نه میتونی اون جداول را تغییر بدی چون اونوقت نرم افزار نمیتونه باهاش کار کنه و نه منطقیه بیای هر بار کل اطلاعات یا اطلاعات جدید را به روز کنی. خوب مجبوری با این شیوه عمل کنی دیگه ، لجبازی نداره.

:لبخندساده:
بله متوجه این قضیه نبودم و دیدم در خصوص گرفتن اطلاعات یک چیزی مثل وب سرویس یا api بود .

اینم میدونم که توی برنامه نویس های c# یا ویندوزی ذخیره تاریخ دفرمه زیاد باب هست نه ما تحت وب ها ، البته اونجا هم اگر برنامه نویس واقعا برنامه نویس باشه نمیاد تاریخ را شمسی یا هجری ذخیره کنه و باید از DateType استفاده کرده باشه .

اگر واقعا کارم جایی گیر کرد که هیچ راه فراری نداشتم بعد از چند تا ناسزا گفتن به برنامه نویس :D مجبورم بیام تاریخ شمسی را explode کنم و یک بلایی سرش بیارم . اینجا دیگه اجباریه :لبخندساده: