PDA

View Full Version : سوال: آگهی مدت دار



hassanf
یک شنبه 26 آبان 1387, 02:19 صبح
من تو سایتی که دارم می سازم قسمتی به نام آگهی داره.

میخواهم بعد از اینکه آگهی به سایت اضافه شد بعد از مدت زمان خاصی مثلا 20 روز

بطور اتوماتیک خودش پاک بشه.

آگهی ها هم در بانک اطلاعاتی sql server 2005 ذخیره می شود.

لطفا راهنمایی کنید.

mahdi_farhani
یک شنبه 26 آبان 1387, 07:57 صبح
1-یک فیلد Active براش در نظر بگیری ، و یک فیلد ExpiryDate که تاریخ انقضاء رو مشخص میکنه
حالا هنگام Select بهش بگو اونهایی رو بیاره که Active باشن و ExpiryDate بزرگتراز امروز باشه
*************
2-هنگام Select بررسی کن که اگر ExpiryDate از امروز کوچکتر باشه Active رو False کنه و حالا کلیه رکوردهای فعال رو بیاره
*************
3-اگر ExpiryDate از امروز کوچکتر بود کلاً رکورد رو حذف کنه ( ولی این روش ، روش جالبی نیست)
/////////
به نظر من روش اول بهتره

ali_sorouri2005
یک شنبه 26 آبان 1387, 11:04 صبح
خوب اينجوري مياد از تاريخ سرور استفاده مي كنه.
آيا ميشه به اين تاريخ اعتماد كرد؟
اومديم اين سرور تاريخش بهم ريخت ؟اونوقت اين سايت هم درست كار نخواهد كرد؟

آيا تنها راهش همينه؟

با تشكر

mahdi_farhani
یک شنبه 26 آبان 1387, 12:27 عصر
اون سروری که تاریخش مشکل پیداکنه باید بندازی دور ( البته هیچ وقت اینطوری نمیشه مگر اینکه باتری سیستم ضعیف بشه ، که فکر نکم اونقدر هم بیق باشن که باتری رو عوض نکن )
میتونی رو تعداد بازدید هم شرط بزاری ...............

hassanf
یک شنبه 26 آبان 1387, 14:24 عصر
اگه تا قبل از expired date هیچ select انجام نشه که حذف نمیشه. چون تعداد آگهی ها محدود است.

hassanf
یک شنبه 26 آبان 1387, 14:50 عصر
از چیزی معادل تایمر نمیشه تو sql server استفاده کرد ؟

milade
یک شنبه 26 آبان 1387, 15:35 عصر
سلام عزیز
ببین گفته اقا فراهانی درسته
حالا شاید هم سرور شما بیق بود
من راه حلی که دارم که خیلی هم خوب نیست!(ولی دیگه دیگه!):
هر روز تاریخت رو با تاریخ قبل چک کن اگه برابر بود که هیچ والله یکی به یه فیلد اد کن مثلا count و اگه به تعداد مورد نظر رسید دیگه هر کاری خواستی بکن
موفق باشی!

hassanf
یک شنبه 26 آبان 1387, 17:00 عصر
سلام عزیز
ببین گفته اقا فراهانی درسته
حالا شاید هم سرور شما بیق بود
من راه حلی که دارم که خیلی هم خوب نیست!(ولی دیگه دیگه!):
هر روز تاریخت رو با تاریخ قبل چک کن اگه برابر بود که هیچ والله یکی به یه فیلد اد کن مثلا count و اگه به تعداد مورد نظر رسید دیگه هر کاری خواستی بکن
موفق باشی!


سلام

سرور تاریخ را درست نمایش می دهد.
مشکل همین هر روز چک کردن است !

چگونه می شود بطور اتوماتیک sql server چک کند ببیند به Expired date رسیده یا نه؟

milade
یک شنبه 26 آبان 1387, 17:11 عصر
متاسفانه sql server نمی تونه خودتون باید سر بزنید یا این که با یه برنامه که توی سرور اجرا می کنیدش می تونید این کار رو کنید

hassanf
یک شنبه 26 آبان 1387, 17:25 عصر
متاسفانه sql server نمی تونه خودتون باید سر بزنید یا این که با یه برنامه که توی سرور اجرا می کنیدش می تونید این کار رو کنید

پس این سایت های تبلیغاتی که روال کارشون همین طوری چه کار می کنند ؟

یعنی هر روز یه آدم بیکار باید تاریج پایان آگهی رو چک کنه؟

تازه آگه تعداد آگهی ها هم زیاد باشه که اصلا امکان پذیر نیست.

milade
یک شنبه 26 آبان 1387, 17:32 عصر
خوب عزیز من وقتی شما یه برنامه بنویسید یا اگه کنترل پنل قابلیت اجرای یه صفحه رو برای این کار داشته باشه ادم بیکار هم نمی خواد چون برنامه Run هست
موفق باشی

hassanf
یک شنبه 26 آبان 1387, 17:41 عصر
من فکر می کنم خود Sql server حتما این امکان رو یا راهی برای حل این مشکل باید داشته باشه .

mahdi_farhani
یک شنبه 26 آبان 1387, 17:51 عصر
چرا خودتون رو گیج میکنید .
شما وقتی یک فیلد ExpiryDate داشته باشید که تاریخ انقضاء اگهی داخلش نهگداری بشه . با یک کوئری میتونی لیست آگهی ها که باید نمایش داده بشه رو بدست میاره.
شما باید یک Select رو دیتابیس داشته غیر از اینه ؟
حالا به جای اینکه بنویسی Select * From Advertise باید بنویسی Select * from advertise Where Expiry<=today
دیگه اینجا به یک فرد بیکار احتیاج نداری که بشین تاریخ انقضاء رو چک کنه ، با هر بار فراخوانی تبلیغات فعال برگدانده میشه

milade
یک شنبه 26 آبان 1387, 17:52 عصر
نمی دونم
الته فکر نکم دیگه این قدرم...
شما یه برنامه یازید که هر روز چک کنه که اگه فیلد بیش از مثلا 20 روز بود خذف کنه اگه نه یکی اد کنه
موفق باشید

mahdi_farhani
یک شنبه 26 آبان 1387, 17:56 عصر
در ضمن شما زمانی که به نمایش تبلیغات احتیاج دارید ، تاریخ انقضاء چک میشه ، نه زمانی دیگری .....

hassanf
یک شنبه 26 آبان 1387, 18:05 عصر
با تشکر از Farahani و Milade

حرف شما کاملا درست است

ولی من می خواهم آگهی هایی که اتمام شده توسط خود Sql server حذف شود.(بدون Query)

آیااین امکان وجود دارد ؟

milade
یک شنبه 26 آبان 1387, 18:28 عصر
از یکی از اساتید پرسیدم گفتن با enterprise manager می شه .
نمی دونم چه طوری
دوستان اگه می دونند این اقا حسن رو help کنن!

m.hamidreza
یک شنبه 26 آبان 1387, 20:18 عصر
با تشکر از Farahani و Milade

حرف شما کاملا درست است

ولی من می خواهم آگهی هایی که اتمام شده توسط خود Sql server حذف شود.(بدون Query)

آیااین امکان وجود دارد ؟
بدون Query نمشه که!
معمولا این حذف بصورت Logical انجام میشه نه Physical چون مسلما بعدها شما به History این تبلیغات نیاز خواهید داشت. روشی هم که جناب فرهانی گفتن حذف بصورت Logical هست. اونجوری که شما میخوای، رکورد رو باید Delete کنی که یا باید با یه Job در SQL انجام بدی یا به روشی که قبلا در یه تاپیک آموزشی با عنوان WebTaskScheduling مطرح شده استفاده کنید.
در کل روش جناب فرهانی معقولتر هست چون عملا نیازی به این همه پیچیده کاری نیست.

mahdi_farhani
یک شنبه 26 آبان 1387, 20:18 عصر
تو همون Select بش بگو حذف کنه ، با اولین بازدیدی که صورت بگیره کلیه تبلیغات منقضی شده حذف میشود و بقیه نمایش داده میشه


Delete advertise Where expiryDate<@today
Select * from advertise where active=1

حالا این Query وقتی صدا زده میشه اول قبلی ها رو حذف میکنه و اونهایی که فعال هستند را نمایش میده .
trgier هم میتونی بنویسی
فکر کنم schedulet داشته باشه ولی ، نمیدونم کجا و چطوری استفاده میشه ( شاید هم نداشته باشه )
ولی باید این نکته توجه داشته باشی که برنامه تحت وب مثل برنامه های مبتنی بر فرم نیست که همیشه در حال اجرا باشن ..............

ali_sorouri2005
یک شنبه 26 آبان 1387, 20:25 عصر
ببين از طريق sql server ميشه ولي سرور هاست اين امكان رو به شما نميده.
در sql server توسط job ها ميتونه يه job تعريف كني و با استفاده از schadule بهش بگي هر روز در ساعت معيني اين job اجرا بشه.
اين كارها توسط sql agent انجام ميشه.
ولي من از شركتي كه هاست ميگيرم اينو سوال كردم گفتن اين سرويس رو به كاربران نميدن.
ولي با توجه به صحبت هاي بالا آقاي farhani دارن روش درستي رو ميگن.
يكم روش فكر كن.كارت راه ميفته با همينم.

twelve
یک شنبه 26 آبان 1387, 21:34 عصر
من در مورد این سوال حرف خاصی ندارم چون سوال توی تاپیک شماره 2 حل شد!
فقط خواستم تشکر ویژه ای داشته باشم از آقای فرهانی که همیشه بدون حاشیه به سوالات جواب میدن و لب مطلب رو به پرسش کنندگان میگن و هیچ وقت هم سعی نمیکنند که قلق های اصلی رو مخفی کنند :)

حسن جان شما مطمئن باشید که با پاسخ های آقا مهدی کارتون به خوبی پیش خواهد رفت، روش شماره 1 رو که آقا مهدی در اولین جوابشون گفتن انتخاب و ادامه بدین :)

hassanf
یک شنبه 26 آبان 1387, 21:47 عصر
روشی که آقای فرهانی گفتند معقول و قابل استفاده است.
دلیل پرسش من بیشتر به خاطر سوالی بود که در ذهنم به وجود آمد که آیا در بازه های زمانی خاصی میشود روی Database عملیاتی انجام داد ؟

دوستان میشه در مورد Job بیشتر راهنمایی کنید.

با تشکر

ali_sorouri2005
یک شنبه 26 آبان 1387, 22:04 عصر
از توي خود sql server 2005 يه منو داري به نام sql agent اول بازش كن روي job كليك راست كن
و يه job جديد كه در اصل يه query براي اجرا هستش ايجاد كن.و همون جا هم بهش زمان بده.
بعد روي sql agent كليك راست كن و بعد startرو كليك كن.
حالا كوئري توي job در زمان تايين شده و تا وقتي كه agent فعال باشه اجرا ميشه.