برای ذخیره این موارد معمولا از آرایه استفاده میشه و آرایه هم از 0 شروع میشه


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


جوابش طولاانی و کمی پیچیدست

شما یه روز بیای ببینی موجودی محصول 0 شده معلوم نیست که چجوری 0 شده کی کم کرده و بابت چی
یا مثلا ممکنه کسی که همزمان 2 نفر ویرایش کنن مثلا 2 تا موجودی داره 2 نفر همزمان خرید کنن
نفر اول منیگه خب موجودی2 هست و من دارم 1 دونه خرید میکنم پس موجودی باید بشه 1
نفر دوم هم همین رو میگه ... هردو موجودی رو ویرایش میکنن و 1 میزارن آخرش با اینکه 2 تا محصول خرید شده 1 دونه از موجودی کم میشه
و مشکلات اینچنینی مربوط به race condition

شما باید یه تیبل بزاری به اسم مثلا انبار داری یا هرچی مثلا product_stocks

product_stocks : id , product_id , quantity , type
1 , 2 , 10 , in
2 , 2 , 2 , out
3 , 2 , 1 , out



وقتی محصولی موجودیش کم و زیاد بشه توی این تیبل ثبت بشه یک ردیف ... in یعنی موجودی اضافه شده و out یعنی موجودی کم شده
بعد میگی که وقتی یک ردیف در این تیبل ثبت شد اگه in بود برو تو تیبل محصولات فیلد موجودی رو اضافه کن به مقدار quantity و اگه out بود کم کن
اینکارو با کد نویسی نبایید انجچام بدی چون هنوز مشکلات مربوط به race condition رو خواهی داشت
این کارو باید در سطح دیتابیس انجام بدی یه چیزی هست به اسم trigger که اگه نمیدونی چیه راجبش سرچ کن تو یوتوب فیلم آموزشش رو ببین یا اگه اتگلیسیت خوب نیست مقاله فارسی هم باید باشه
کارش اینه که تعریف میکنی که اگه یک تیبل تغییرکرد چه تاثیری بزاره رو تیبل دیگه

شما 2 تا تریگر نیازداری

1 - قبل از ثبت یک ردیف در تیبل product_stocks ثبت شد برو تو تیبل محصولات و موجودی رو کم و زیاد کن به تناسبش
2 - قبل از ویرایش تیبل محصولات چک کنه اگر موجودی کمتر از 0 میشه پس از ویرایش اررور بده و انجام نده

حالا فرض کن کسی محصولی رو میخره

شما باید یک ردیف درتیبل product_stocks ثبت کنی که این ردیف بعد میره تیبل محصولات رو ویرایش میکنه و یدونه از موجودیش کم میکنه
حالا شما اگه کلا 1 دونه موجودی داشته باشی تو تیبلت و 2 نفر هممزان خرید کنن تریگر دوم باعث میشه که یکی از اینا انجام نشه و نتونه خرید کنه

حال نمیخام زیاد طولانیش کنم ولی شما کوئری هات رو توی transaction و try/catch میزاری که وقتی این حالت پیش میاد یه اررور مناسب نشون بدی به کاربر