جستجو در بخش : سوال جواب منابع اسلامی لغت نامه ها قوانین و مصوبات نقل قل ها
×

فرم ورود

ورود با گوگل ورود با گوگل ورود با تلگرام ورود با تلگرام
رمز عبور را فراموش کرده ام عضو نیستم، می خواهم عضو شوم
×

×

آدرس بخش انتخاب شده


جهت کپی کردن میتوانید از دکمه های Ctrl + C استفاده کنید
رویداد ها - امتیازات
در حال بارگذاری
×

رویداد ها - امتیازات

برای بررسی عملکرد فعالیت و امتیازات خود باید در وب سایت وارد باشید. در صورت عضویت از بخش بالای صفحه وارد شوید، در غیر این صورت از دکمه پایین، مستقیم به صفحه ثبت نام وارد شوید.

×
×
×

دلیل درخواست بستن پست

کلیه پست هایی که جنبه تبلیغاتی داشته، محتوای اسپم و بی مفهوم در این دسته قرار میگیرند. همچنین پست هایی که به منظور گرفتن بک لینک درج می شوند شامل این مورد هستند.
حاوی مفاهیم غیر اخلاقی، سیاسی و یا توهین آمیز. کلیه پست هایی که از نظر محتوایی نیاز به بررسی و یا حذف شدن دارند در این دسته قرار می گیرند.
محتوایی با عدم جزئیات کافی و مورد نیاز. کلیه پست هایی که منظور نویسنده به وضوح مشخص نیست و نیازمند توضیحات و جزئیات بیشتر می باشند در این دسته قرار می گیرند.
محتوایی بی ربط با موضوعیت سرفصل کلی. کلیه پست هایی که از منظر مفهوم و مضمون ارتباطی با عنوان اصلی سوال ندارند در این دسته قرار می گیرند.
محتوایی دلخواه و بر پایه سلیقه. کلیه پست هایی که یک پاسخ مشخص ندارند و متوانند چندین پاسخ متفاوت و صحیح داشته باشند که کاملا مبتنی بر نظر شخصی افراد هستند در این دسته قرار می گیرند.
محتوایی در حوزه خیلی وسیع. کلیه پست هایی که از نظر محتوایی در یک حوزه ی وسیعی قرار دارند و مشخصا به یک موضوع خاصی اشاره ندارند که پاسخدهی به آن ها مستلزم تشریح مفاهیمی کلی می باشند در این دسته قرار می گیرند.
قبلا در لام تا کام مطرح شده. پست هایی که دقیقا با همین محتوا و مضمون قبلا در وب سایت لام تا کام درج شده اند، با ذکر آدرس منبع تکراری با پست حال حاضر شامل این دسته هستند. تکراری است با:
به سایر دلایل، نیازمند به بررسی توسط مدیر. به هر دلیل غیری که پست را نیازمند بررسی توسط مدیر کرده، با ذکر دلیل، در این دسته قرار میگیرد.
ارسال رای بستن

طبقه بندی تاریخ به «دیروز»، «هفته پیش» و .. در MySQL


0
0
333

خب دوستان یک سوال دارم راجع به group کردن سطر ها مبنی بر تاریخ (timestamp) به دیروز، هفته پیش، ماه پیش و ...

جدولی که دارم به صورت ساده شده یک همچین چیزی میشه:

// mytable
+----+------------+
| id | date_time  |
+----+------------+
| 1  | 1464136759 | -- 5 days ago
| 2  | 1464436759 | -- 2 days ago
| 3  | 1464538248 | -- 6 hours ago
+----+------------+

مقادیر 5 و 2 روز پیش یا 6 ساعت پیش اینا از لحظه فعلی حساب شده.

کوئری که نوشتم به این صورته:

SELECT id, CASE DATE(FROM_UNIXTIME(date_time))
           WHEN CURDATE() THEN 'today' 
           WHEN CURDATE() - INTERVAL 1 DAY THEN 'yesterday'
           WHEN CURDATE() - INTERVAL 7 DAY THEN 'in last week'
           ELSE 'in last month or more'
           END range
FROM mytable
WHERE 1

که خروجیش میشه این:

+----+---------------+
| id |     range     |
+----+---------------+
| 1  | in last month |
| 2  | in last month |
| 3  | yesterday     |
+----+---------------+

همونطور که میبینید خروجی کلا اشتباه محاسبه میشه و تاریخ ها درست تبدیل نشدن. چیزی که مد نظرم هست اینه و باید خروجی به این شکل باشه:

+----+--------------+
| id |    range     |
+----+--------------+
| 1  | in last week |
| 2  | yesterday    | 
| 3  | today        |
+----+--------------+

ممنون میشم راهنمایی کنید چطوری میتونم کوئریم رو تغییر بدم که همچین خروجی بگیرم؟

علمی برنامه-نویسی پایگاه-داده
سوال شده در ساناز رضایی
1366 امتیاز

500 کاراکتر باقی مانده

2 جواب

1

کوئری که نیاز دارید به این شکل باید باشه:

SELECT id,
       (CASE WHEN FROM_UNIXTIME(date_time) >= CURDATE() THEN 'today'
             WHEN FROM_UNIXTIME(date_time) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 'yesteray'
             WHEN FROM_UNIXTIME(date_time) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'in last week'
             ELSE 'in last month or more'
        END) as `range`
FROM mytable
WHERE 1;

نکته اول این هست که نیازی نیست که unix تایم رو به date تبدیل کنید و میشه با curdate() مقایسش کنید و ختلافش رو در قالب روز/هفته/ماه و سال با date_sub() محاسبه کنید.

نکته دوم هم اینکه واژه range یک کلمه رزرو شده هست توی SQL، پس یا باید از یک کلمه دیگه استفاده کنید یا اونو با بک‌تیک escape کنید.

جواب داده شده در سعید مرادی
1933 امتیاز


ممنونم کوئری که نوشتید رو اجرا کردم و دقیقا مثل چیزی که انتظار داشتم خروجی داد مرسی ــ ساناز رضایی در 9 ماه قبل

500 کاراکتر باقی مانده


4

در MySQL، شما می‌توانید از توابع تاریخی مختلف استفاده کنید تا تاریخ‌ها را بر اساس دیروز، هفته پیش و... طبقه‌بندی کنید. این توابع معمولاً بر روی مقادیر تاریخ و زمان عملیات مورد نظر انجام می‌دهند. در ادامه، نمونه‌هایی از تابع DATE_SUB را برای طبقه‌بندی تاریخ‌ها در MySQL آورده‌ام:

  1. دیروز:

    SELECT * FROM table_name
    WHERE date_column = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
  2. هفته پیش:

    SELECT * FROM table_name
    WHERE date_column >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)
    AND date_column <= DATE_SUB(CURDATE(), INTERVAL 1 DAY);
  3. ماه قبل:
    SELECT * FROM table_name
    WHERE date_column >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
    AND date_column <= DATE_SUB(CURDATE(), INTERVAL 1 DAY);

در اینجا، table_name نام جدول داده‌ها و date_column نام ستون حاوی تاریخ‌ها می‌باشد. تابع DATE_SUB با مقادیر تاریخ و اینترول تعیین‌کننده مدت زمان مورد نظر، تاریخ جدیدی را بازگردانده و مقایسه‌های مورد نیاز را بر اساس تاریخ‌های جدید انجام می‌دهد.

همچنین، توجه داشته باشید که نحوه طبقه‌بندی تاریخ‌ها بستگی به نیاز و منطق برنامه شما دارد و می‌توانید از توابع دیگری نیز برای این منظور استفاده کنید.

جواب داده شده در علیرضا اسی
71 امتیاز


ممنونم از جوابی که دادید، رای مثبت دادم به پاسختون ــ ساناز رضایی در 9 ماه قبل

500 کاراکتر باقی مانده


جواب شما
     
.....
×

×

جعبه لام تا کام


وب سایت لام تا کام جهت نمایش استاندارد و کاربردی در تمامی نمایشگر ها بهینه شده است.

تبلیغات توضیحی


داپ اَپ اولین پلتفرم کش‌بک در ایران
اگه میخوای از خریدهایی که میکنی، پاداش نقدی دریافت کنی داپ اَپ رو نصب کن.

تبلیغات تصویری