نمایش نتایج 1 تا 21 از 21

نام تاپیک: بهترین نوع فرمت برای ذخیره سازی

  1. #1

    بهترین نوع فرمت برای ذخیره سازی

    بهترین نوع فرمت برای ذخیره سازی تاریخ و زمان در MySQL چطور هست.
    با توجه به اینکه بعدا هر طور خواستیم روش مانوور بدیم ( منظورم اینه که بعدا واسه Sort و بیرون کشیدن و ... اطلاعات مشکلی نداشته باشیم و دستمون بسته نباشه )

  2. #2
    بهترین راه برای ذخیره تاریخ و زمان در Php استفاده از تابع time() برای گرفتن تاریخ فعلی و ذخیره اون تو دیتابیس هست.
    خروجی این تابع تعداد ثانیه های گذشته از اول ژانویه 1970 هستش ( مثل 162538 ).

    برای تبدیل این نوع تاریخ به صورت معمولی ( 1/1/1979 ) میتونیم از تابع date بصورت زیر استفاده کنیم.

    $now = time();
    $date = date("Y-m-d", $now);
    echo $date;

  3. #3
    شما کاملا متوجه منظور من نشدید.
    من میخوام بدونم که فیلدی که در دیتابیس باید برای ذخیره زمان و تاریخ تعیین کنم از چه نوعی باید باشه.

  4. #4

  5. #5
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    من شخصا عموما timestamp می ذارم. حداقلش اینه که کمترین فضا رو برای تاریخ و ساعت می گیره!
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  6. #6
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    نقل قول نوشته شده توسط oxygenws
    من شخصا عموما timestamp می ذارم. حداقلش اینه که کمترین فضا رو برای تاریخ و ساعت می گیره!

    1- آیا با انتخاب این فرمت میشه قبل از بیرون کشیدن اطلاعات از دیتابیس، دیتا را Sort کرد؟
    2- آیا میشه اطلاعات بین 2 تاریخ را قبل از بیرون کشیدن اطلاعات از دیتابیس، Select کرد؟

    مرسی

  7. #7
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    ۱- بله
    ۲- بله
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  8. #8
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    نقل قول نوشته شده توسط oxygenws
    ۱- بله
    ۲- بله
    در مورد سوال 2 میشه با یک Query نشونم بدین؟

  9. #9
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    سطر های دیروز تا امروز:

    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

  10. #10
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    نقل قول نوشته شده توسط oxygenws
    سطر های دیروز تا امروز:

    SELECT * FROM xyz WHERE date <= UNIX_TIMESTAMP(NOW()) AND date > UNIX_TIMESTAMP(NOW()) - 86400


    اینو همین الان نوشتم، شاید مشکلات کوچیکی داشته باشه...
    دوست خوب، ممنون که توجه کردی. اما کمی برام مبهم هست. اگر برات امکانش هست در اطلاعات 5 روز پیش تا 10 روز آینده را Select کن. اینطوری کاملا دستم میاد که چه اتفاقی می افته.
    مرسی

  11. #11
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    قبلی یه اشکال کوچیک داشت که الان برطرف شد.

    $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

  12. #12
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    نقل قول نوشته شده توسط 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 جستجو کردم و کاملا متوجه شدم که چی هست.

    متاسفانه قسمتی از مسئلمو نمیتونم حل کنم.

    من روزانه مطالبی را درون یک دیتا بیس میریزم ( یک چیزی مثل وبلاگ )
    میتونم هم مقادیر را Select کنم و بیرون بیارم و در چند صفحه هم نمایش بدم.
    اما مشکل اینجا هست که نمیتونم اطلاعاتم را جداگانه Select کنم و مثلا 5 روز آخر را جدا از هم لیست کنم. به اینطورت که مثلا امروز 5 تا ازسال بوده حالا بیاد 5 تا ارسال را لیست کنه. روزگذشته 8 تا بوده این 8 تا را جدا اما در زیر دسته بندی روز قبل لیست کنم.
    با تاریخها سرو کله زدم نشد.
    با Subquery ها تا حدودی سرو کله زده اما بازم نشد.
    خسته شدم

  13. #13
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    من مفهوم این مشکل دومت رو نفهمیدم...
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  14. #14
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    نقل قول نوشته شده توسط oxygenws
    من مفهوم این مشکل دومت رو نفهمیدم...
    فرض کنیم ما اطلاعات 50 روز را در دیتابیس داریم. بعضی از این اطلاعات تاریخ یکسانی دارند ( یعنی در یک روز چند رکورد ثبت شده )


    حالا من میخوام اطلاعات 5 روز آخری که دیتا ثبت ده را از دیتابیس بیرون بکشم.

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

  15. #15
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    همون کوئری ای که من در بالا نوشتم جواب میده دیگه!! مشکل اون چیه؟؟
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  16. #16
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    نقل قول نوشته شده توسط oxygenws
    همون کوئری ای که من در بالا نوشتم جواب میده دیگه!! مشکل اون چیه؟؟
    من خروجی را براتون بفرستم تا بلکه از این راه بتونم منظورمو برسونم. خوبه اینطور؟

  17. #17
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    به این توجه داشته باشید که روزها پشت سر هم نیستند. ممکنه بین نوشتن مطالب توی دیتابیس چند روز یا چند هفته وقفه به وجود بیاد.



  18. #18
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    تنها چیزی که الان به ذهن من می رسه، استفاده از دو تا کوئری است...

    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

  19. #19
    کاربر تازه وارد آواتار Helen_Farhani
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اینترنت
    پست
    60
    نقل قول نوشته شده توسط 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


    این کد قطعا جواب میده (با رفع باگ های احتمالی) اما احتمالا بهترین راه نیست!! باز هم جستجو بکن...

    آقا مدیر میترسم که بگم، نفهمیدم که چی شد!
    where 1=1 

    این از کجا اومده

  20. #20
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    خط اول تعداد پست های هر *روز* رو می شماره (به فرض اینکه 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

  21. #21
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    این رو تست کن، این از قبلی خیلی بهتره، تو یک پرس و جو....


    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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •