بهترین نوع فرمت برای ذخیره سازی تاریخ و زمان در MySQL چطور هست.
با توجه به اینکه بعدا هر طور خواستیم روش مانوور بدیم ( منظورم اینه که بعدا واسه Sort و بیرون کشیدن و ... اطلاعات مشکلی نداشته باشیم و دستمون بسته نباشه )
بهترین نوع فرمت برای ذخیره سازی تاریخ و زمان در MySQL چطور هست.
با توجه به اینکه بعدا هر طور خواستیم روش مانوور بدیم ( منظورم اینه که بعدا واسه Sort و بیرون کشیدن و ... اطلاعات مشکلی نداشته باشیم و دستمون بسته نباشه )
بهترین راه برای ذخیره تاریخ و زمان در Php استفاده از تابع time() برای گرفتن تاریخ فعلی و ذخیره اون تو دیتابیس هست.
خروجی این تابع تعداد ثانیه های گذشته از اول ژانویه 1970 هستش ( مثل 162538 ).
برای تبدیل این نوع تاریخ به صورت معمولی ( 1/1/1979 ) میتونیم از تابع date بصورت زیر استفاده کنیم.
$now = time();
$date = date("Y-m-d", $now);
echo $date;
شما کاملا متوجه منظور من نشدید.
من میخوام بدونم که فیلدی که در دیتابیس باید برای ذخیره زمان و تاریخ تعیین کنم از چه نوعی باید باشه.
من شخصا عموما timestamp می ذارم. حداقلش اینه که کمترین فضا رو برای تاریخ و ساعت می گیره!
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
نوشته شده توسط oxygenws
1- آیا با انتخاب این فرمت میشه قبل از بیرون کشیدن اطلاعات از دیتابیس، دیتا را Sort کرد؟
2- آیا میشه اطلاعات بین 2 تاریخ را قبل از بیرون کشیدن اطلاعات از دیتابیس، Select کرد؟
مرسی
۱- بله
۲- بله
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
در مورد سوال 2 میشه با یک Query نشونم بدین؟نوشته شده توسط oxygenws
سطر های دیروز تا امروز:
SELECT * FROM xyz WHERE date <= UNIX_TIMESTAMP(NOW()) AND date > UNIX_TIMESTAMP(NOW()) - 86400
اینو همین الان نوشتم، شاید مشکلات کوچیکی داشته باشه...
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
دوست خوب، ممنون که توجه کردی. اما کمی برام مبهم هست. اگر برات امکانش هست در اطلاعات 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 چیه، یه جستجویی تو اینترنت بکن.
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
در مورد timestamp جستجو کردم و کاملا متوجه شدم که چی هست.نوشته شده توسط oxygenws
متاسفانه قسمتی از مسئلمو نمیتونم حل کنم.
من روزانه مطالبی را درون یک دیتا بیس میریزم ( یک چیزی مثل وبلاگ )
میتونم هم مقادیر را Select کنم و بیرون بیارم و در چند صفحه هم نمایش بدم.
اما مشکل اینجا هست که نمیتونم اطلاعاتم را جداگانه Select کنم و مثلا 5 روز آخر را جدا از هم لیست کنم. به اینطورت که مثلا امروز 5 تا ازسال بوده حالا بیاد 5 تا ارسال را لیست کنه. روزگذشته 8 تا بوده این 8 تا را جدا اما در زیر دسته بندی روز قبل لیست کنم.
با تاریخها سرو کله زدم نشد.
با Subquery ها تا حدودی سرو کله زده اما بازم نشد.
خسته شدم
من مفهوم این مشکل دومت رو نفهمیدم...
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
فرض کنیم ما اطلاعات 50 روز را در دیتابیس داریم. بعضی از این اطلاعات تاریخ یکسانی دارند ( یعنی در یک روز چند رکورد ثبت شده )نوشته شده توسط oxygenws
حالا من میخوام اطلاعات 5 روز آخری که دیتا ثبت ده را از دیتابیس بیرون بکشم.
دقیقا یک چیزی مثل وبلاگ.
5 روز آخر را زیر هم نمایش میدیم. حالا ممکنه که در یک روز چند بار پست فرستاده باشیم.
متوجه شدین؟
همون کوئری ای که من در بالا نوشتم جواب میده دیگه!! مشکل اون چیه؟؟
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
من خروجی را براتون بفرستم تا بلکه از این راه بتونم منظورمو برسونم. خوبه اینطور؟نوشته شده توسط oxygenws
به این توجه داشته باشید که روزها پشت سر هم نیستند. ممکنه بین نوشتن مطالب توی دیتابیس چند روز یا چند هفته وقفه به وجود بیاد.
تنها چیزی که الان به ذهن من می رسه، استفاده از دو تا کوئری است...
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
این کد قطعا جواب میده (با رفع باگ های احتمالی) اما احتمالا بهترین راه نیست!! باز هم جستجو بکن...
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
نوشته شده توسط oxygenws
آقا مدیر میترسم که بگم، نفهمیدم که چی شد!
where 1=1
این از کجا اومده
خط اول تعداد پست های هر *روز* رو می شماره (به فرض اینکه date فقط تاریخ رو شامل میشه و ساعت نداره)
اون where هم که نوشتم فقط برای اینه که جای where رو رزرو کرده باشم، به هر حال شما هیچ where ای ندارید؟؟
با PHP تعداد تمام پست های 5 روز آخر رو می شماری... (این کارو میشه با stored procedure هم انجام داد)
و خط بعدی به اون تعدادی که شمردی، limit می کنی و اون تعداد پست اخر رو می خونی.
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi
این رو تست کن، این از قبلی خیلی بهتره، تو یک پرس و جو....
SELECT * FROM table_name
WHERE date IN(
SELECT date FROM table_name
WHERE 1=1
ORDER BY date DESC
GROUP BY date
LIMIT 5
)
ایمیل من
سایت من
عضویت در جامعهی اهدای عضو
Direct PGP key: http://tinyurl.com/66q5cy
PGP key server: keyserver.ubuntu.com
PGP name to search: omidmottaghi