آژانس هواپیماییexchanging

جايگزين شدن ركورد خالي

شروع موضوع توسط setareh2 ‏20 ژوئن 2005 در انجمن PHP

  1. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    تو MySql يه ركورد دارم به اسم id كه از نوع INT و auto_increment هست و در ضمن اين primary key تيبل هست...
    تو برنامه ما هر چند وقت يه بار يه سري ركورد حذف ميشه و يه سري ركورد اضافه ميشه...
    چكار ميشه كرد كه id ركوردهاي جديد به جاي اينكه يكي بيشتر از آخرين id باشه يكي از ركوردهاي حذف شده باشه؟

    نمي دونم منظورم رو درست گفتم يا نه!
    مثلا بعد از پاك كردن ركورد 5 ترتيب id ها ميشه: 1و2و3و4و6و 7
    حالا اگه ما ركورد جديد اضافه كنيم id اون ميشه 8!
    من ميخوام id اون بشه 5...
     
  2. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    ميتوني ركوردها رو فيزيكي حذف نكني بلكه فقط ماركدارشون كني - مثلا يك فيلد yes/no بعنوان Is_Deleted به جدولت استفاده كني (و در تمام queryها هم اين فيلد رو در نظر بگيري كه false باشه)
    حالا بجاي اضافه كردن ركورد جديد اون رو روي ركوردي overwrite كن كه Is_Deleted اون True و Id اون كمترين مقدار رو داره!
    ولي بايد راههاي بهتري هم باشه! اينكار overhead داره.
     
  3. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    ايده جالبي بود ممنون...
     
  4. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    براي حذف overhead در كدنويسي و عدم نياز به تغيير كدهاي فعلي (بخش نمايش اطلاعات) يك كار ديگه هم ميشه كرد و اون ايجاد يك جدول براي نگهداري Id ركوردهاي حذف شده قبل از حذف فيزيكي هست.
    حالا براي ايجاد ركورد جديد اگر اين جدول هيچ ركوردي نداشت كه به روال عادي ركورد اضافه بشه و در غير اينصورت كوچكترين Idش رو پيدا (و بعد حذف) كن و همراه با اطلاعات جديد در جدول اصلي ايجاد كن.
     
  5. miladmovie

    miladmovie مدیر بازنشسته کاربر فعال

    تاریخ عضویت:
    ‏25 دسامبر 2002
    نوشته ها:
    1,936
    تشکر شده:
    2
    فکر کنم نتونیم این کار رو انجام بدیم !
    چون وقتی می گیم یک فیلد یکتا می خواهیم یعنی چی ؟
    یعنی که فقط یک بار ایجاد بشه و دیگه شبیه اون رو نداشته باشیم(یعنی یکتا باشه) !!!!


    حالا شاید روشی هم داشته باشه ولی این استدلال من بود ! فکر کنم توی SQL SERVER خودش اتوماتیک آخرین رکورد رو بر می داره ولی نمی تونه از بینش کدی رو درست کنه !
     
  6. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    كدوم كار رو نميشه انجام داد؟ - خواسته كلي ستاره2 يا روشهاي پيشنهادي؟
     
  7. appbannerkhuniresbanner
  8. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    ممنون دوستان مشكل اصلي من رسيدن به ركورد قبلي و بعدي( http://forum.persiantools.com/t20925.html ) بود كه حل شد...
    البته اگه از روش مازولاق عزيز استفاده كنم بجاي استفاده از چند query از يه query استفاده ميشه
     
  9. miladmovie

    miladmovie مدیر بازنشسته کاربر فعال

    تاریخ عضویت:
    ‏25 دسامبر 2002
    نوشته ها:
    1,936
    تشکر شده:
    2
    منظورم همونی که ستاره می خواد