بهترین نوع فرمت برای ذخیره سازی تاریخ و زمان در MySQL چطور هست.
با توجه به اینکه بعدا هر طور خواستیم روش مانوور بدیم ( منظورم اینه که بعدا واسه Sort و بیرون کشیدن و ... اطلاعات مشکلی نداشته باشیم و دستمون بسته نباشه )
Printable View
بهترین نوع فرمت برای ذخیره سازی تاریخ و زمان در MySQL چطور هست.
با توجه به اینکه بعدا هر طور خواستیم روش مانوور بدیم ( منظورم اینه که بعدا واسه Sort و بیرون کشیدن و ... اطلاعات مشکلی نداشته باشیم و دستمون بسته نباشه )
بهترین راه برای ذخیره تاریخ و زمان در Php استفاده از تابع time() برای گرفتن تاریخ فعلی و ذخیره اون تو دیتابیس هست.
خروجی این تابع تعداد ثانیه های گذشته از اول ژانویه 1970 هستش ( مثل 162538 ).
برای تبدیل این نوع تاریخ به صورت معمولی ( 1/1/1979 ) میتونیم از تابع date بصورت زیر استفاده کنیم.
$now = time();
$date = date("Y-m-d", $now);
echo $date;
شما کاملا متوجه منظور من نشدید.
من میخوام بدونم که فیلدی که در دیتابیس باید برای ذخیره زمان و تاریخ تعیین کنم از چه نوعی باید باشه.
من شخصا عموما timestamp می ذارم. حداقلش اینه که کمترین فضا رو برای تاریخ و ساعت می گیره!
نقل قول:
نوشته شده توسط oxygenws
1- آیا با انتخاب این فرمت میشه قبل از بیرون کشیدن اطلاعات از دیتابیس، دیتا را Sort کرد؟
2- آیا میشه اطلاعات بین 2 تاریخ را قبل از بیرون کشیدن اطلاعات از دیتابیس، Select کرد؟
مرسی
۱- بله
۲- بله
در مورد سوال 2 میشه با یک Query نشونم بدین؟نقل قول:
نوشته شده توسط oxygenws
سطر های دیروز تا امروز:
SELECT * FROM xyz WHERE date <= UNIX_TIMESTAMP(NOW()) AND date > UNIX_TIMESTAMP(NOW()) - 86400
اینو همین الان نوشتم، شاید مشکلات کوچیکی داشته باشه...
دوست خوب، ممنون که توجه کردی. اما کمی برام مبهم هست. اگر برات امکانش هست در اطلاعات 5 روز پیش تا 10 روز آینده را Select کن. اینطوری کاملا دستم میاد که چه اتفاقی می افته.نقل قول:
نوشته شده توسط oxygenws
مرسی
قبلی یه اشکال کوچیک داشت که الان برطرف شد.
$ten_days = time() + 60 * 60 * 24 * 10;
$five_days = time() - (60 * 60 * 24 * 5);
SELECT * FROM xyz WHERE UNIX_TIMESTAMP(date) <= $ten_days AND UNIX_TIMESTAMP(date) > $five_days - 86400
اگر نمی دونی unix timestamp چیه، یه جستجویی تو اینترنت بکن.
در مورد timestamp جستجو کردم و کاملا متوجه شدم که چی هست. :لبخندساده:نقل قول:
نوشته شده توسط oxygenws
:افسرده: متاسفانه قسمتی از مسئلمو نمیتونم حل کنم.
من روزانه مطالبی را درون یک دیتا بیس میریزم ( یک چیزی مثل وبلاگ )
میتونم هم مقادیر را Select کنم و بیرون بیارم و در چند صفحه هم نمایش بدم.
اما مشکل اینجا هست که نمیتونم اطلاعاتم را جداگانه Select کنم و مثلا 5 روز آخر را جدا از هم لیست کنم. به اینطورت که مثلا امروز 5 تا ازسال بوده حالا بیاد 5 تا ارسال را لیست کنه. روزگذشته 8 تا بوده این 8 تا را جدا اما در زیر دسته بندی روز قبل لیست کنم.
با تاریخها سرو کله زدم نشد.
با Subquery ها تا حدودی سرو کله زده اما بازم نشد.
خسته شدم
من مفهوم این مشکل دومت رو نفهمیدم...
فرض کنیم ما اطلاعات 50 روز را در دیتابیس داریم. بعضی از این اطلاعات تاریخ یکسانی دارند ( یعنی در یک روز چند رکورد ثبت شده )نقل قول:
نوشته شده توسط oxygenws
حالا من میخوام اطلاعات 5 روز آخری که دیتا ثبت ده را از دیتابیس بیرون بکشم.
دقیقا یک چیزی مثل وبلاگ.
5 روز آخر را زیر هم نمایش میدیم. حالا ممکنه که در یک روز چند بار پست فرستاده باشیم.
متوجه شدین؟
همون کوئری ای که من در بالا نوشتم جواب میده دیگه!! مشکل اون چیه؟؟
من خروجی را براتون بفرستم تا بلکه از این راه بتونم منظورمو برسونم. خوبه اینطور؟نقل قول:
نوشته شده توسط oxygenws
به این توجه داشته باشید که روزها پشت سر هم نیستند. ممکنه بین نوشتن مطالب توی دیتابیس چند روز یا چند هفته وقفه به وجود بیاد.
http://img.majidonline.com/pic/51640/query.gif
تنها چیزی که الان به ذهن من می رسه، استفاده از دو تا کوئری است...
select count(*) from table_name where 1=1 group by date order by date desc
بعد ۵ تا عدد برگشتی از ابتدا رو با هم جمع کنی (برای ۵ روز) و بریزی تو متغیری مثل $x و بفرستی توی این کوئری....
select * from table_name
where 1=1 order by date desc limit $x
این کد قطعا جواب میده (با رفع باگ های احتمالی) اما احتمالا بهترین راه نیست!! باز هم جستجو بکن...
نقل قول:
نوشته شده توسط oxygenws
آقا مدیر میترسم که بگم، نفهمیدم که چی شد!
where 1=1
این از کجا اومده
:افسرده:
خط اول تعداد پست های هر *روز* رو می شماره (به فرض اینکه date فقط تاریخ رو شامل میشه و ساعت نداره)
اون where هم که نوشتم فقط برای اینه که جای where رو رزرو کرده باشم، به هر حال شما هیچ where ای ندارید؟؟
با PHP تعداد تمام پست های 5 روز آخر رو می شماری... (این کارو میشه با stored procedure هم انجام داد)
و خط بعدی به اون تعدادی که شمردی، limit می کنی و اون تعداد پست اخر رو می خونی.
این رو تست کن، این از قبلی خیلی بهتره، تو یک پرس و جو....
SELECT * FROM table_name
WHERE date IN(
SELECT date FROM table_name
WHERE 1=1
ORDER BY date DESC
GROUP BY date
LIMIT 5
)