PDA

View Full Version : سوال: روش ساخت آرشيو ماهانه



merlin_vista
شنبه 06 مهر 1387, 16:24 عصر
سلام :
چند وقته كه درگير اين موضوع شدم . :متفکر:

من تعدادي مطلب داخل ديتابيس ذخيره ميكنم ، تاريخ و ساعت را به صورت ميلادي در فيلدي با نوع datetime نگهداري ميكنم . :لبخندساده:

سوالي را كه براي من پيش آمده ، اينه كه آرشيو ماهانه را چگونه ايجاد كنم .
در بسياري از وبلاگ ها با اين امكان روبرو شده ايد ..
شهریور ۱۳۸۷
مرداد ۱۳۸۷
تیر ۱۳۸۷
خرداد ۱۳۸۷
اردیبهشت ۱۳۸۷
فروردین ۱۳۸۷
اسفند ۱۳۸۶

ميخواستم بدونم كه روش ايجاد اينگونه آرشيو ها چگونه هست .
در جستجو هايي كه در اين سايت انجام دادم يعضي از دوستان گفته بودند با تابع هاي كار با رشته ماه را جدا كن و بعد لينك ها را بساز . راستش من زياد چيزي متوجه نشدم و به نظرم روش خوبي نيومد . از دوستاني كه قبلاً اين كار را كردن لطفاً نظر خودشان را اعلام كنيد و روش انجام كار را بنويسيد :چشمک:

ممنون :قلب::قلب:

merlin_vista
شنبه 06 مهر 1387, 19:44 عصر
البته شما استاد ما هستید.
شما اختيار داريد .

بله اين روشي كه شما گفتيد ميشه انجام داد ولي به نظر من استاندارد نمياد . كه ماه و سال را تو يه فيلد به هم بچسبوني و با يك Where آنها را فراخاني كني .. به نظرم حتماً راه بهتري هم هست ، فقط بايد پيداش كرد

salehbagheri
شنبه 06 مهر 1387, 22:32 عصر
از تابع استفاده کنید!

GetMonth(ByVal DateTime As DateTime) As Integer
این تابع در PCal موجوده!

همانطور که میبینید تاریخ رو میدید و شماره ماه رو میگیرید!

merlin_vista
شنبه 06 مهر 1387, 23:36 عصر
مشكل من گرفتن شماره يا نام ماه يا تبديل تاريخ ميلادي به شمسي و امثال اين ها نسيت .

مشكل بنده گرفتن ركوردهاي آن ماه از سال از ديتابيس است، دسته بندي آنها در صفحه ، اختصاص يك لينك به هر ماه است .

در كل روش ايجاد چنين چيزي را ميخواهم .

samaram
یک شنبه 07 مهر 1387, 03:55 صبح
سلام. منم همين روشي كه tarhebartar فرمودن رو به ذهنم مي رسه. ماه و سال در يك فيلد داخل بانك قرار مي گيرن. توي صفحه به يه drop down list بايند مي شن. با انتخاب هر گزينه ، عناوين پست هايي با اون تاريخ در بانك ، زيرdropdownlist درج مي شه. بعد با انتخاب هر گزينه توسط كاربر دقيقا همون مطلب توي صفحه درج مي شه. مسلما مي دونيد كه ميشه كار رو راحت تر هم كرد و عناوين رو نشون نداد. يعني مستقيما پست هاي اون تاريخ رو در صفحه قرار داد.
به هر صورت اگه همين روش خوبه براتون كدها رو بنويسم.

mahdi_farhani
یک شنبه 07 مهر 1387, 07:21 صبح
من نظرم اینه که شما تاریخ رو چک کنی که الان تو چه ماهی هستی و بعد از اون هرجوری که میخواهی آرشیو رو نشون بدی ماه های قبلی رو براش لیست کن ( میخواهد مطلی داشته باشه ، میخواهد نداشته باشه) تا اینجا که فکر نکم کار مشکلی داشته باشه .
بعد هم روی هر لینک که کلیک کردن به وسیله یک کوئری از تاریخ 1/YYYY/M تا تاریخ 31/YYYY/M رو مطالبش رو بیاره .

salehbagheri
یک شنبه 07 مهر 1387, 12:19 عصر
در بانک خود یک ستون از نوع int به نام (شماره ماه) اضافه کنید!
بعد ماه مربوط به خبرهاتون را از طریق تابع (درج شده در بالا: تاپیک4) بگیرید و در این ستون ذخیره کنید!

هنگام فراخوانی اطلاعات هم از طریق همین ستون می تونید کارهاتون رو پیش ببرید.

merlin_vista
یک شنبه 07 مهر 1387, 13:26 عصر
دوستان به نظرم ميشه از Group By در SQL استفاده كرد . ولي نميدونم چه گونه . اگه امكان داره از اين طريق راهنمايي بفرماييد .

با تشكر .

Amir Taghavi
یک شنبه 07 مهر 1387, 13:39 عصر
SELECT MONTH(myDate) as [MonthNumber], COUNT(*) as [Count]
FROM tblArchive
group by MONTH(myDate)

sina39229
یک شنبه 07 مهر 1387, 20:00 عصر
سلام

من این کار را در سایت http://www.avatech.ir انجام دادم و این بدی صورته که یه جدول برای آرشیو اخبار در نظر گرفته ام با یه ID که با جدول اخبارم یه ارتیاط داره و یه view گرفتم که تمامی ماههایی که خبر در آن وجود دارد را به من نمایش می ده و فکر کنم راه بدی نباشه !!

merlin_vista
دوشنبه 08 مهر 1387, 16:52 عصر
SELECT MONTH(myDate) as [MonthNumber], COUNT(*) as [Count]
FROM tblArchive
group by MONTH(myDate)

ممنون دوست عزيز . :قلب:
ولي كوئري شما چند تا مشكل داره . :لبخند:
اوليش اين كه اين كوئري به درد يك سال ميخوره . شما بايد Group را طوري بنويسيد . كه بر اساس ماه و سال گروپ بكونه . :اشتباه:

دوميش اين كه چرا نميشه سال را هم مثل ماه به خروجي داد . من از تابع YEARE استفاده كردم ولي پيغام داد . هر فيلدي را كه اضافه ميكيني خطا ميده . :عصبانی++:

Amir Taghavi
دوشنبه 08 مهر 1387, 17:45 عصر
توجه نکردی!

اطلاعات موجود:


2008-10-10 00:00:00.000
2008-02-10 00:00:00.000
2008-10-03 00:00:00.000
2008-10-07 00:00:00.000
2009-02-03 00:00:00.000
2010-05-07 00:00:00.000
2009-03-03 00:00:00.000
2009-02-20 00:00:00.000دستور (بهمراه سال):


SELECT YEAR(myDate) as [Year], MONTH(myDate) as [MonthNumber], COUNT(*) as [Count]
FROM tblArchive
group by MONTH(myDate), YEAR(myDate)خروجی دستور:


Year MonthNumber Count
----------- ----------- -----------
2008 2 1
2008 10 3
2009 2 2
2009 3 1
2010 5 1

merlin_vista
دوشنبه 08 مهر 1387, 20:42 عصر
Amir Taghavi (http://www.barnamenevis.org/forum/member.php?u=12732) شرمنده آقا .

ممنون از لطف شما . بيشتر دقت ميكنم .........

bftarane
یک شنبه 12 آذر 1391, 20:05 عصر
لطفاً خروجي پست 13 رو ببينيد حالا چطور ميشه اون خروجي ها رو يعني Year و Month Number رو به تاريخ فارسي تبديل کرد؟
با توجه به اينکه int هستند نه DateTime?

hamed_hossani
یک شنبه 12 آذر 1391, 21:28 عصر
سه مقدار رو بردارید
یک شی dateTime بسازید

DateTime dateFr = new DateTime(1989, 02, 19);
بدید به persianDate براتون فارسی کنه!

fakhravari
یک شنبه 12 آذر 1391, 22:14 عصر
http://barnamenevis.org/showthread.php?357151-%D8%A2%D8%B1%D8%B4%DB%8C%D9%88-%D9%85%D8%A7%D9%87%D8%A7%D9%86%D9%87-%D9%85%D8%B7%D8%A7%D9%84%D8%A8&highlight=%D8%A2%D8%B1%D8%B4%DB%8C%D9%88+%D9%85%D8 %A7%D9%87%D8%A7%D9%86%D9%87

EnKamran
جمعه 06 اردیبهشت 1392, 13:03 عصر
دوستان اگر زحمت یک سرچ رو میدادن به خودشون خیلی سریع تر به جواب میرسیدن :


DateTime beginDate, endDate;
// set beginDate and endDate as appropriate, based on the month you are displaying
beginDate = new DateTime(2013, 4, 1);
endDate = beginDate.AddMonths(1);
var query = from post in context.TBL_Posts
where post.PostSendDate >= beginDate && post.PostSendDate < endDate
orderby post.PostSendDate descending
select post;
foreach (var q in query)
{
Response.Write(q.PostContent);
Response.Write("<br/>");
Response.Write(q.PostSendDate);
Response.Write("<hr/>");
}

fakhravari
جمعه 06 اردیبهشت 1392, 15:58 عصر
دوستان اگر زحمت یک سرچ رو میدادن به خودشون خیلی سریع تر به جواب میرسیدن :


DateTime beginDate, endDate;
// set beginDate and endDate as appropriate, based on the month you are displaying
beginDate = new DateTime(2013, 4, 1);
endDate = beginDate.AddMonths(1);
var query = from post in context.TBL_Posts
where post.PostSendDate >= beginDate && post.PostSendDate < endDate
orderby post.PostSendDate descending
select post;
foreach (var q in query)
{
Response.Write(q.PostContent);
Response.Write("<br/>");
Response.Write(q.PostSendDate);
Response.Write("<hr/>");
}

شوخی میکنی!