نمایش نتایج 1 تا 20 از 20

نام تاپیک: چجوری میتونم قبل از اینسرت مقدار فیلد auto-increment رو تشخیص بدم؟؟

  1. #1
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268

    چجوری میتونم قبل از اینسرت مقدار فیلد auto-increment رو تشخیص بدم؟؟

    چجوری میتونم قبل از اینسرت مقدار فیلد auto-increment رو تشخیص بدم؟؟
    یعنی فرض کنید یک جدول دارم که فیلدهاش name , family , id باشه و id، auto-increment باشه.
    حالا میخوام یه رکورد جدید اینسرت کنم، میخوام مقداری رو که آیدی دریافت میکنه ، قبل از اینسرت بدست بیارم.

  2. #2
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    قبلش نمی تونی(شاید بتونی، من دقیق نمی دونم) ولی بعدش می تونی!!
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  3. #3
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    بالاخره وقتی mysql به طور اتوماتیک عدد بعدی رو انتخاب میکنه ، حتما عدد قبلی رو یه جایی ذخیره کرده.
    نمیشه بهش دسترسی پیدا کرد؟؟

  4. #4
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    این اطلاعات در خود موتور بانک (جایی که کل اطلاعات جداول و ... ذخیره میشه) قرار داره.
    من راهی برای دسترسی به اون نمی دونم، اما ممکنه وجود داشته باشه، راهنمای MySQL رو بخون!
    اگر به نتیجه ای رسیدی، ممنون میشم اینجا بگی.

    ضمن اینکه اگر کل کاری که دوست داری بکنی رو اگر بگی، میشه کمکت کرد..... به نظر میرسه کلا روشت مشک داره!
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  5. #5
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    من کار خاصی ندارم
    یعنی تا حالا برای کارام این کار رو میکردم:
    اول یه رکورد خالی اینسرت میکردم و بعد میتونستم آیدی ش رو بفهمم. بعد اون رو آپدیت میکردم

    میخواستم بدونم میتونم بدون این کارا به نتیجه برسم یا نه. چون با این روش هر دفعه صفحه باز میشه یه رکورد خالی اینسرت میشه و باید دستور پاک کردن رکوردهای خالی رو هم بدم

    به هر حال راه حل بدی نیست.
    میشه ازش استفاده کرد.

  6. #6
    کاربر دائمی آواتار Happy_davood
    تاریخ عضویت
    دی 1383
    محل زندگی
    تبریز
    سن
    44
    پست
    306
    خوب دوست عزیز قبل از اینکه رکورد جدید رو وارد کنید یک Select بزنید :

    DECLARE @MaxID smallint
    SELECT @MaxID = MAX(ID) FROM Members
    SET @CurrentID = @MaxID + 1


    خوب اگر مثلاً آخرین ID برابر 1150 بوده الان هم خواهد شد 1151 .
    آخرین ویرایش به وسیله Happy_davood : جمعه 14 مرداد 1384 در 01:07 صبح

  7. #7
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    این راه صحیح نیست!!

    چون ممکنه من یه رکورد رو حذف کرده باشم.
    مثلا اگر آخرین آی دی من 140 بوده باشه و من اونو حذف کنم ، در نتیجه آخرین آیدی من به 139 مبدل شده. و وقتی که بخوام یه رکورد جدید اینسرت کنم، رکرود جدید با آیدی 141 ثبت میشه، نه با 140.
    اونوقت اینجاس که راه حل شما ایراد پیدا میکنه.

  8. #8
    کاربر دائمی آواتار Happy_davood
    تاریخ عضویت
    دی 1383
    محل زندگی
    تبریز
    سن
    44
    پست
    306
    راست می گید . فکر اینجاش رو نکرده بود .

  9. #9
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    اول یه رکورد خالی اینسرت میکردم و بعد میتونستم آیدی ش رو بفهمم. بعد اون رو آپدیت میکردم
    مشکل من اینه که هیچ توجیهی برای این کارت نمی بینم!!!
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  10. #10
    اطلاعات mysql_insert_id رو از تو php Manual پیدا کن و روش کار کن. احتمالا خودشه. (تست نکردم!!)

  11. #11
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    احتمالا خودشه
    من phpmanual رو دیدم. ولی الان در موقعیتی نیستم که تابع رو تست کنم.
    اگه دیدم کارش درسته خبرتون میکنم.

    خیلی ممنون

  12. #12
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    نه.....
    این تابع id بعد از insert رو نشون میده.... id آخرین فیلدی که توسط اون connection وارد بانک شده.
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  13. #13
    دستت درد نکنه!!

  14. #14

    Cool دمتون گرم

    فکر کنم یا اطلاعات من ناقصه و یا شما حواستون پرته(ببخشیدا بی احترامی نشه)
    در صورتی که یک رکورد با فیلد آیدی 400 داشته باشید و اون رو حذف کنید بعد از اضافه نمودن رکورد جدید آیدی اون 401 می شه نه 400 .
    این هم به علت ویژگی autoIncrement هست.

  15. #15
    . آواتار oxygenws
    تاریخ عضویت
    دی 1382
    محل زندگی
    تهران/مشهد
    پست
    6,333
    درسته جناب عنکبوتی :)
    هم صحبت های شما درسته و هم صحبت های ما..... فقط مشکل اینجاست که شما کامل و درست تمام پست های قبلی رو نخوندی :)
    ایمیل من
    سایت من

    عضویت در جامعه‌ی اهدای عضو

    Direct PGP key: http://tinyurl.com/66q5cy
    PGP key server: keyserver.ubuntu.com
    PGP name to search: omidmottaghi

  16. #16
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    یه مسئله ی اساسی که هیچ کدوممون بهش فکر نکرده بودیم اینه که اصلا نباید این امکان باشه.

    چون ممکنه، دو یا چند نفر همزمان وارد اون صفحه ای شده باشن که آی دی توش پیدا میشه.
    اونقوت هر کدوم جداگانه میخوان مثلا سابمیت رو بزنن و اینسرت انجام بشه. در این لحظه اگر ما بخوایم آی دی مورد نظر رو قبل از اینسرت نمایش بدیم ، همه ی اونها یک عدد رو میبینن مثلا همه می بینن 180.
    در صورتی که هر کدوم از اونها که عمل اینسرت رو انجام میدن ، رکورد ثبت شده با آی دی متفاوتی ثبت میشه.

    به طور کلی این رو میخوام بگم که mysql فقط در لحظه ی اینسرت تعیین میکنه که آی دی باید چی باشه. یعنی دقیقا قبل از اینسرت تشخیص داده میشه. یعنی وقتی MySQL به دستور insert میرسه تازه فعالیتشو انجام میده که ببینه چه آی دی ای باید ثبت بشه.

    امیدوارم مفهوم بوده باشه.

  17. #17

    نقل قول: چجوری میتونم قبل از اینسرت مقدار فیلد auto-increment رو تشخیص بدم؟؟

    منم دنبالشم
    من میخوام همزمان دوتا رکورد در دو تیبل اینسرت کنم بطوری که از طریق id هاشون با هم لینک بشن

    یک راهش اینه که در مواقع اینسرت کردن یک نشانه با مقدار اولیه "1" رو یک واحد افزایش بدیم

    ولی من بدنبال راه علمیش هستم

    مطمئنا راهی داره که از طریق sql بشه آخرین id استفاده شده رو کشف کرد

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

  18. #18

    نقل قول: چجوری میتونم قبل از اینسرت مقدار فیلد auto-increment رو تشخیص بدم؟؟

    نقل قول نوشته شده توسط Neyshaburi مشاهده تاپیک
    منم دنبالشم
    من میخوام همزمان دوتا رکورد در دو تیبل اینسرت کنم بطوری که از طریق id هاشون با هم لینک بشن

    یک راهش اینه که در مواقع اینسرت کردن یک نشانه با مقدار اولیه "1" رو یک واحد افزایش بدیم

    ولی من بدنبال راه علمیش هستم

    مطمئنا راهی داره که از طریق sql بشه آخرین id استفاده شده رو کشف کرد

    ممنون میشم دوستان راهنمایی کنن
    درباره last insert id in mysql جستجو کنید...

  19. #19
    کاربر دائمی آواتار hamedarian2009
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    گرگان
    پست
    1,691

    نقل قول: چجوری میتونم قبل از اینسرت مقدار فیلد auto-increment رو تشخیص بدم؟؟

    تاپیک مال 10 سال پیشه الان علم پیشرفت کرده مثلا برای PHP تو لینک زیر مثال زده :
    http://www.w3schools.com/php/php_mys...ert_lastid.asp

  20. #20
    کاربر دائمی آواتار kabootar_y
    تاریخ عضویت
    خرداد 1393
    محل زندگی
    ایران/اصفهان
    پست
    234

    نقل قول: چجوری میتونم قبل از اینسرت مقدار فیلد auto-increment رو تشخیص بدم؟؟

    نقل قول نوشته شده توسط tabib_m مشاهده تاپیک
    یه مسئله ی اساسی که هیچ کدوممون بهش فکر نکرده بودیم اینه که اصلا نباید این امکان باشه.

    چون ممکنه، دو یا چند نفر همزمان وارد اون صفحه ای شده باشن که آی دی توش پیدا میشه.
    اونقوت هر کدوم جداگانه میخوان مثلا سابمیت رو بزنن و اینسرت انجام بشه. در این لحظه اگر ما بخوایم آی دی مورد نظر رو قبل از اینسرت نمایش بدیم ، همه ی اونها یک عدد رو میبینن مثلا همه می بینن 180.
    در صورتی که هر کدوم از اونها که عمل اینسرت رو انجام میدن ، رکورد ثبت شده با آی دی متفاوتی ثبت میشه.

    به طور کلی این رو میخوام بگم که mysql فقط در لحظه ی اینسرت تعیین میکنه که آی دی باید چی باشه. یعنی دقیقا قبل از اینسرت تشخیص داده میشه. یعنی وقتی MySQL به دستور insert میرسه تازه فعالیتشو انجام میده که ببینه چه آی دی ای باید ثبت بشه.

    امیدوارم مفهوم بوده باشه.

    دوست عزیز انگار شما چیستان مطرح کردی و وقتی دیدی کسی جوابش رو نمی دونه خودت جواب داری
    سوء تفاهم نشه مزاح کردم

    اگر می خواهید مشکلتون حل بشه من یه راه بتون میگم ولی اگه می خواهید فقط ببینید همچین امکانی وجود داره یا نه من نمی دونم باید چی کار کرد

    برای حل این مشکل من این طور پیشنهاد می کنم:

    از اونجایی که مقدار یک فیلد auto-increment می تونه به صورت دستی هم ثبت بشه میشه اول با یک select مقدار بزرگترین id رو گرفت و یکی بهش اضافه که کرد و در در کوئری insert جدید برای id قرار داد

    مثال:






    $get_id = mysql_fetch_array(mysql_query("SELECT id FROM mytable ORDER BY ID DESC LIMIT 1"));


    $new_id = $get_id['id']+1;


    mysql_query("INSERT INTO mytable (id, name, family) VALUES ($new_id, $name, $family)");


تاپیک های مشابه

  1. نمایش اعداد اعشاری در حالت Auto
    نوشته شده توسط mahdighasemi در بخش گزارش سازی با Crystal Report
    پاسخ: 3
    آخرین پست: چهارشنبه 25 مهر 1386, 07:45 صبح
  2. کنترل فیلد auto-increment
    نوشته شده توسط mrrajabi در بخش MySQL
    پاسخ: 14
    آخرین پست: یک شنبه 04 شهریور 1386, 17:35 عصر
  3. Auto Increment
    نوشته شده توسط شفیعی در بخش برنامه نویسی در Delphi
    پاسخ: 11
    آخرین پست: جمعه 21 فروردین 1383, 23:26 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •