برگزیده های پرشین تولز

جلوگیری از ویرایش همزمان یک row توسط بیش از یک کاربر

IntelCentrino

Registered User
تاریخ عضویت
19 ژوئن 2009
نوشته‌ها
57
لایک‌ها
0
به چه شکل میشه جلوی این را گرفت که دو کاربر بصورت همزمان نتوانند بر روی یک رکورد (row) عملیاتی را انجام دهند.

مثلا دو کاربر بصورت همزمان نتوانند رکوردی که ID ان 10 است را SELECT و سپس UPDATE کنند؟



-
 

DorSite

کاربر تازه وارد
تاریخ عضویت
1 دسامبر 2009
نوشته‌ها
25
لایک‌ها
0
فکر نکنم اطلاعاتی که همزمان ارسال میشه
همزمان هم ثبت بشه . نشدنیه

نمیدونم با چه زبان یا برنامه ای کار میکنی .
شما کاری کن ساعت و زمان همراه هر اپدیت ثبت بشه
تا بتونی شرطی برای محاسبه زمان و وفقۀ لازم بذاری
 

DorSite

کاربر تازه وارد
تاریخ عضویت
1 دسامبر 2009
نوشته‌ها
25
لایک‌ها
0
این شمایید که باید بیشتر توضیح بدید :rose:
 

IntelCentrino

Registered User
تاریخ عضویت
19 ژوئن 2009
نوشته‌ها
57
لایک‌ها
0
نمیدونم با چه زبان یا برنامه ای کار میکنی .

مسلما با PHP دارم این کار را انجام میدم و البته از MySQL به عنوان DBMS

در رابطه با خود برنامه هم باید بگم که در جدولی که دارم (در دیتابیس) تعداد زیادی row وجود داره که هر کدام فیلدی به نام status وجود داره. وقتی کاربر وارد برنامه میشه اولین سطری که فیلد status آن برابر با 0 باشه SELECT میشه و کاربر میتونه اطلاعات آن رکورد را ویرایش کند. مشکل اینجا بروز میکنه که در برخی اوقات 2 کاربر اگر همزمان وارد سیستم بشوند هر دو یک رکورد را SELECT و ویرایش میکنند.
راه حلی که به ذهن خودم رسید این است که یک فیلد به جدول اضافه کنم (مثلا status_edit) و وقتی SELECT میزنم شرطی هم در SELECT قرار دهم که رکوردی که در حال edit هست SELECT نشود.
این راه حداقل یک ایراد داره. ایرادش این است که در صورتیکه کاربر بطور ناخواسته نتوانست تغییرات را ذخیره کند تکلیف چی هست؟! باید اسکریپت دیگری بنویسم که موارد این چنینی را با fix کند (با تغییر فیلد status_edit)؟!
 

Amenocy

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
25 ژانویه 2008
نوشته‌ها
3,261
لایک‌ها
602
محل سکونت
اردوگاه کار اجباری
میتونی اینجوری ست کنی که وقتی کوئری انتخاب شد استاتوس اون به رزرو شده تغییر پیدا کنه . یوزر دیگه نتونه اونو انتخاب کنه چون صفر نیست
 

IntelCentrino

Registered User
تاریخ عضویت
19 ژوئن 2009
نوشته‌ها
57
لایک‌ها
0
و اگر بعد از رزرو شدن، تغییرات بصورت ناخواسته توسط کاربر ذخیره نشد مقدار اون فیلد رزرو شده باقی می ماند و در SELECT های بعدی هم SELECT نمیشه. نظرتون چی هست؟
 

Amenocy

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
25 ژانویه 2008
نوشته‌ها
3,261
لایک‌ها
602
محل سکونت
اردوگاه کار اجباری
و اگر بعد از رزرو شدن، تغییرات بصورت ناخواسته توسط کاربر ذخیره نشد مقدار اون فیلد رزرو شده باقی می ماند و در SELECT های بعدی هم SELECT نمیشه. نظرتون چی هست؟

خب شما میتونی یه کاری کنی کوئری های رزرو شده که از تاریخ ساختشون مثلا" 2 ساعت میگزده تغییر استاتوس بده
 

IntelCentrino

Registered User
تاریخ عضویت
19 ژوئن 2009
نوشته‌ها
57
لایک‌ها
0
خب شما میتونی یه کاری کنی کوئری های رزرو شده که از تاریخ ساختشون مثلا" 2 ساعت میگزده تغییر استاتوس بده

منطقی هست که اینکار را به همراه SELECT اجرا کنم یا قسمت جداگانه ای از برنامه را تحت این عنوان در نظر بگیرم؟
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر

IntelCentrino

Registered User
تاریخ عضویت
19 ژوئن 2009
نوشته‌ها
57
لایک‌ها
0
متشکرم. راه حل آخر را بکار گرفتم (قفل کردن table) :)
 
بالا