پدرخوانده
جمعه 27 مرداد 1391, 02:23 صبح
در سیستم سامانه های خبری قابلیتی است بصورت تعیین اولویت که به عنوان پارامتری جهت ایندکس استفاده می شود بدین صورت که مشخص می کند که این رکورد (خبر) در چندمین اولویت (سطر) قرار بگیرید
شاید در نگاه اول ساده بوده و دوستان پاسخ دهند که خوب عدد 1 تا ... می گذاریم (یا اصطلاحا یک فیلد auto incorment انتخاب می کنیم) ولی نکته مربوطه آن است که در این سورت معکوس می باشد یعنی بدین صورت که هر خبر جدیدی که قرار داده می شود خود ترتیب اولویت 1 را دارد و بالطبع رکوردهای قبلی (اخبار قبلی) اولویت های بعدی می شوند (یعنی اولویتشان یک شماره تغییر می کند)
به عنوان راه اول مقدماتی سورت را بر اساس تاریخ و ساعت خبر قراردادم
ولیکن راه حل مناسبی نبود چرا که زمانی که می خواهیم یک خبر قدیمی را مثلا در ردیف اولویت 5 قرار دهیم باید تاریخ و ساعت خبر 4و 6 را ببینیم و آنگاه تغییر تاریخ و ساعت را اعمال کنیم
یکی از دوستان همان روش فیلد auto incroment را پیشنهاد داده ولیکن به هنگام نمایش و در دستور select به هنگام تعیین فیلد order by از desc (معکوس) استفاده کنیم
خوب شاید در نگاه اول مشکلی نداشته باشد ولیکن به هنگامی که تصمیم به تغییر یک خبر با تعیین اولویت مربوطه را خواستاریم
اولا در حالتی که به عنوان این فیلد (ترتیب) کلید اصلی انتخاب شده امکان ورود عدد تکراری وجود ندارد در پاسخ بگوییم حال نیازی به انتخاب اتوماتیک توسط mysql نیست و خودمان این عمل (انتخاب آخرین عدد برای هر رکورد) را انجام دهیم که تازه مشکلات و دردسرهای شبکه ای آن را نیز رفع کنیم (در محیط شبکه همزمان ممکن است صدها نفر رکورد جدید انتخاب کرده و عدد جدید استفاده کنند)
که وقتی مثلا عدد 5 را برای آن رکورد انتخاب می کنیم (باید آخرین عدد محاسبه شود و 5 عدد از آن کسر شود)
ثانیا اولویت دومی جهت سورت وجود ندارد و مشخص نیست که این خبر در ردیف 5 ام بایستد
خلاصه آنکه روش های مختلفی را دوستان پیشنهاد داده اند انجام دادم ولیکن هیچ کدام مثمر ثمر نبود
عزیزانی اگر راه حلی به ذهنتان خطور کرد ممنون میشوم پیشنهاد بدهند؟
---
نکته: البته این روش الان در اکثریت نرم افزارهای سامانه های خبری همچون ایران سامانه، هایپرمدیا و... انجام می شود و شاید نکته خاصی هم نداشته باشد ولی به هر حال بنده تاکنون نتوانستم آن را بدست بیاورم
شاید در نگاه اول ساده بوده و دوستان پاسخ دهند که خوب عدد 1 تا ... می گذاریم (یا اصطلاحا یک فیلد auto incorment انتخاب می کنیم) ولی نکته مربوطه آن است که در این سورت معکوس می باشد یعنی بدین صورت که هر خبر جدیدی که قرار داده می شود خود ترتیب اولویت 1 را دارد و بالطبع رکوردهای قبلی (اخبار قبلی) اولویت های بعدی می شوند (یعنی اولویتشان یک شماره تغییر می کند)
به عنوان راه اول مقدماتی سورت را بر اساس تاریخ و ساعت خبر قراردادم
ولیکن راه حل مناسبی نبود چرا که زمانی که می خواهیم یک خبر قدیمی را مثلا در ردیف اولویت 5 قرار دهیم باید تاریخ و ساعت خبر 4و 6 را ببینیم و آنگاه تغییر تاریخ و ساعت را اعمال کنیم
یکی از دوستان همان روش فیلد auto incroment را پیشنهاد داده ولیکن به هنگام نمایش و در دستور select به هنگام تعیین فیلد order by از desc (معکوس) استفاده کنیم
خوب شاید در نگاه اول مشکلی نداشته باشد ولیکن به هنگامی که تصمیم به تغییر یک خبر با تعیین اولویت مربوطه را خواستاریم
اولا در حالتی که به عنوان این فیلد (ترتیب) کلید اصلی انتخاب شده امکان ورود عدد تکراری وجود ندارد در پاسخ بگوییم حال نیازی به انتخاب اتوماتیک توسط mysql نیست و خودمان این عمل (انتخاب آخرین عدد برای هر رکورد) را انجام دهیم که تازه مشکلات و دردسرهای شبکه ای آن را نیز رفع کنیم (در محیط شبکه همزمان ممکن است صدها نفر رکورد جدید انتخاب کرده و عدد جدید استفاده کنند)
که وقتی مثلا عدد 5 را برای آن رکورد انتخاب می کنیم (باید آخرین عدد محاسبه شود و 5 عدد از آن کسر شود)
ثانیا اولویت دومی جهت سورت وجود ندارد و مشخص نیست که این خبر در ردیف 5 ام بایستد
خلاصه آنکه روش های مختلفی را دوستان پیشنهاد داده اند انجام دادم ولیکن هیچ کدام مثمر ثمر نبود
عزیزانی اگر راه حلی به ذهنتان خطور کرد ممنون میشوم پیشنهاد بدهند؟
---
نکته: البته این روش الان در اکثریت نرم افزارهای سامانه های خبری همچون ایران سامانه، هایپرمدیا و... انجام می شود و شاید نکته خاصی هم نداشته باشد ولی به هر حال بنده تاکنون نتوانستم آن را بدست بیاورم