مشکل auto-increment در mysql

شروع موضوع توسط s.beglou ‏21 فوریه 2013 در انجمن برنامه‌نویسی با PHP

کلمات کلیدی:
  1. s.beglou

    s.beglou New Member

    ارسال‌ها:
    4
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    سلام
    من فیلدی ساختم به نام id و مشخصه auto-increment این فیلد رو فعال کردم. همچنین نوعش primary هستش.
    مشکلم اینه که به صورت پیوسته محتویات فیلد ID پر نمیشه. فکر میکنم وقتی برنامه ای که نوشتم رو چندین بار اجرا کردمو برنامه ام خطا داشته و نتیجه اش رو ندیدم عددهای جا افتاده به اون محتویات درج نشده در جدول تخصیص داده شده و همینطور وقتی ردیفی از جدول رو حذف میکنم id اون ردیف دیگه به هیچ ردیف دیگه ای تخصیص داده نمیشه. به هر حال نمیدونم چطور باید اصلاح کنم این مشکل رو. میخوام وقتی برنامه ام درست کار میکنه یعنی محتویاتم وقتی پر میشه id مربوط به هر ردیف جدولم از 1 تا مثلا 10 به صورت پیوسته باشه نه تیکه تیکه.

    ببخشید بهتر از این نمیتونستم توضیح بدم :shock: ولی با عکسی که گذاشتم کاملا منظورم رو رسوندم.
    پیشاپیش تشکر از راهنماییتون.


    Capture.JPG
     
    آخرین ویرایش: ‏21 فوریه 2013
    نوشته شده توسط s.beglou در ‏21 فوریه 2013
  2. mamadshoshteri

    mamadshoshteri New Member

    ارسال‌ها:
    26
    تشکر شده:
    2
    امتیاز دستاورد:
    3
    سلام دوست عزیز تا اونجایی که سواد من قد میده با این فیلد فقط به همین صورت میتونی استفاده کنی و اگه یه ای دی حذف کنی دیگه اونو نمیسازه و از رقم بعدی شروع میکنه روش پیشنهادی من اگه برات ترتیب واجبه اینه که هر بار sum() این فیلدت رو +1 کنی
     
    آخرین ویرایش: ‏25 فوریه 2013
    نوشته شده توسط mamadshoshteri در ‏25 فوریه 2013
  3. ahmad_m1234

    ahmad_m1234 Active Member

    ارسال‌ها:
    197
    تشکر شده:
    90
    امتیاز دستاورد:
    28
    شما باید در برنامه نویسی مقدار آخرین عدد اضافه شده در فیلد id بگیرین بعد از اضافه کردن رکورد یکی به مقدار قبلی اضافه کنید !
     
    نوشته شده توسط ahmad_m1234 در ‏25 فوریه 2013
  4. s.beglou

    s.beglou New Member

    ارسال‌ها:
    4
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    با تشکر از mamadshoshteri ولی باید بگم که من جمع فیلد id رو نمیخوام بنابراین استفاده از sum() مناسب نیست برای کار من از راه حل ahmad_m1234 استفاده کردم ولی همونطور که شما گفتید اگر مقداری از بین این فیلد انتخاب بشه دیگه برنمیگرده.
     
    نوشته شده توسط s.beglou در ‏25 فوریه 2013
  5. s.beglou

    s.beglou New Member

    ارسال‌ها:
    4
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    ممنون از ahmad_m1234 مشکلم حل شد و همونطور که شما گفتید مقدار آخر رو گرفتم و یکی بهش اضافه کردم ولی یه مشکل دیگه هم هست و اون اینکه اگر از بین این فیلد یک مقداری رو حذف کنم دیگه قادر نیستم از مقدار حذف شده استفاده کنم که با راه حل شما تنها در صورتی میتونم که آخرین مقدار حذف شده باشه.
     
    نوشته شده توسط s.beglou در ‏25 فوریه 2013
  6. ziXet

    ziXet مدیر انجمن PHP/MYSQL

    ارسال‌ها:
    1,707
    تشکر شده:
    979
    امتیاز دستاورد:
    36
  7. s.beglou

    s.beglou New Member

    ارسال‌ها:
    4
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    از ziXet هم ممنون ولی
    last-insert-id اصلا کمکی نکرد دقیقا انگار به فیلد id مقدار null رو اختصاص داده باشم. در واقع هیچ فرقی نکرد. مشکل من به دست آوردن مقدار آخر فیلد id نیست مشکل اینه که اگر مقداری از «وسط» فیلد id حذف بشه و اون مقدار مثلا 3 باشه دیگه نمیشه از عدد 3 برای بقیه مقادیر استفاده کرد در واقع با برنامه ای که نوشتم اگر آخرین مقدار فیلد id حذف بشه میشه ازش استفاده کرد در غیر اینصورت نمیشه ازش استفاده کرد.

    اینم برنامه ای که من نوشتم ---> Capture.JPG
     
    نوشته شده توسط s.beglou در ‏25 فوریه 2013
  8. ziXet

    ziXet مدیر انجمن PHP/MYSQL

    ارسال‌ها:
    1,707
    تشکر شده:
    979
    امتیاز دستاورد:
    36
    اصلا ذات auto incement اینه که اگه یه id حذف بشه دیگه نشه جایگزین کرد.
     
    نوشته شده توسط ziXet در ‏26 فوریه 2013
  9. hadizd

    hadizd New Member

    ارسال‌ها:
    1
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    یه راه حل به نظر من رسیده ولی احتمالا ایرادات زیادی داره ولی سواد من همینقدر قد میده :)
    هر رکوردی که از جدول a حذف میکنی id اون رکورد رو در یه جدول temp ذخیره کن بعد در زمان insert کردن در جدول a ، ابتدا برو ببین مقداری در جدول temp هست یا نه، اگه بود از اون مقادیر استفاده کن و اگه جدول temp خالی بود اون وقت برو آخرین مقدار id جدول a رو یکی بهش اضافه کن.
    :green:
    ولی خب در سایت هایی که بازدید کننده و کاربر زیادی داره این روش یه سربار پردازشی به سرور تحمیل میکنه که خوب نیست.:cry:
     
    آخرین ویرایش: ‏2 فوریه 2016
    نوشته شده توسط hadizd در ‏2 فوریه 2016
  10. reza_pnu_ney

    reza_pnu_ney Member

    ارسال‌ها:
    97
    تشکر شده:
    16
    امتیاز دستاورد:
    8
    با حذف یه id دیگه اون قابل استفاده نیست.
    اگر ترتیب برات مهمه نباید auto_increment استفاده کنی. اما بهرحال اگر فقط میخوای داده های جدولت مجددا ست بشن ،
    یه روش سرخپوستی هست اونم اینکه ابتدا جدول رو empty کنی. اگر توی phpmyadmin یه جدول رو empty کنی، auto_increment دوباره از 0 ست میشه. بعد میشه مجدد داده ها رو واردش کنی.
     
    نوشته شده توسط reza_pnu_ney در ‏3 مارس 2016

به اشتراک بگذارید