مشکل auto-increment در mysql

s.beglou

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

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


Capture.JPG
 
آخرین ویرایش:

mamadshoshteri

New Member
سلام دوست عزیز تا اونجایی که سواد من قد میده با این فیلد فقط به همین صورت میتونی استفاده کنی و اگه یه ای دی حذف کنی دیگه اونو نمیسازه و از رقم بعدی شروع میکنه روش پیشنهادی من اگه برات ترتیب واجبه اینه که هر بار sum() این فیلدت رو +1 کنی
 
آخرین ویرایش:

ahmad_m1234

Active Member
شما باید در برنامه نویسی مقدار آخرین عدد اضافه شده در فیلد id بگیرین بعد از اضافه کردن رکورد یکی به مقدار قبلی اضافه کنید !
 

s.beglou

New Member
با تشکر از mamadshoshteri ولی باید بگم که من جمع فیلد id رو نمیخوام بنابراین استفاده از sum() مناسب نیست برای کار من از راه حل ahmad_m1234 استفاده کردم ولی همونطور که شما گفتید اگر مقداری از بین این فیلد انتخاب بشه دیگه برنمیگرده.
 

s.beglou

New Member
ممنون از ahmad_m1234 مشکلم حل شد و همونطور که شما گفتید مقدار آخر رو گرفتم و یکی بهش اضافه کردم ولی یه مشکل دیگه هم هست و اون اینکه اگر از بین این فیلد یک مقداری رو حذف کنم دیگه قادر نیستم از مقدار حذف شده استفاده کنم که با راه حل شما تنها در صورتی میتونم که آخرین مقدار حذف شده باشه.
 

s.beglou

New Member

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

اینم برنامه ای که من نوشتم ---> Capture.JPG
 

ziXet

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

اینم برنامه ای که من نوشتم ---> مشاهده پیوست 93491
اصلا ذات auto incement اینه که اگه یه id حذف بشه دیگه نشه جایگزین کرد.
 

hadizd

New Member
یه راه حل به نظر من رسیده ولی احتمالا ایرادات زیادی داره ولی سواد من همینقدر قد میده :)
هر رکوردی که از جدول a حذف میکنی id اون رکورد رو در یه جدول temp ذخیره کن بعد در زمان insert کردن در جدول a ، ابتدا برو ببین مقداری در جدول temp هست یا نه، اگه بود از اون مقادیر استفاده کن و اگه جدول temp خالی بود اون وقت برو آخرین مقدار id جدول a رو یکی بهش اضافه کن.
:green:
ولی خب در سایت هایی که بازدید کننده و کاربر زیادی داره این روش یه سربار پردازشی به سرور تحمیل میکنه که خوب نیست.:cry:
 
آخرین ویرایش:
با حذف یه id دیگه اون قابل استفاده نیست.
اگر ترتیب برات مهمه نباید auto_increment استفاده کنی. اما بهرحال اگر فقط میخوای داده های جدولت مجددا ست بشن ،
یه روش سرخپوستی هست اونم اینکه ابتدا جدول رو empty کنی. اگر توی phpmyadmin یه جدول رو empty کنی، auto_increment دوباره از 0 ست میشه. بعد میشه مجدد داده ها رو واردش کنی.
 

جدیدترین ارسال ها

بالا