چطور می تونم دو کوئری رو بصورت همزمان اجرا کنم ؟

phpweb

Active Member
چطور می تونم دو کوئری رو بصورت همزمان اجرا کنم ؟

مثلا مقادیر رو از یک جدول بازیابی کنم و همزمان جدول دیگه رو با مقادیر تازه آپدیت کنم؟

یا

مقادیری به یک جدول اضافه کنم و همزمان مقادیر یک جدول رو دلیت کنم؟
 

sibetorsh

Member
INSERT INTO s(sid,sname,sfamily) VALUES (SELECT id,tname,tfamily FROM t)
s نام جدولی است که قرار داده توش ریخته بشه و t نام جدولی هست که اطلات ازش جستجو میشه
 

Masoud1365

مدیر انجمن
باید تراکنش تعریف کنید ! مثل سیستم های بانکی که مثلا وقتی شما کارت به کارت میکنی از حساب یه نفر کم میشه و به حساب یکی دیگه اضافه میشه حالا اگر که این وسط یکیش اجرا بشه و دومی به هر دلیلی اجرا نشه مبلغ کسر شده از کارت برگشت داده میشود !

موفق باشید
 

k2-4u

Well-Known Member
یکی از راه های که موجوده اینه
ابتدا نوع جداول رو innoDB کنید

PHP:
if(mysql_query('BEGIN;')){
	
	$status=1;

	if(!mysql_query('query1'))
		$status=0;

	if(!mysql_query('query2'))
		$status=0;

	if(!mysql_query('query3'))
		$status=0;

	if(!mysql_query('query4'))
		$status=0;

	if($status)
		mysql_query('commit;');


}



چندین راه دیگه هم هست یادم باشه یه مقاله بنویسم !
 
آخرین ویرایش:

phpweb

Active Member
یکی از راه های که موجوده اینه
ابتدا نوع جداول رو innodb کنید

PHP:
if(mysql_query('begin;')){
    
    $status=1;

    if(!mysql_query('query1'))
        $status=0;

    if(!mysql_query('query2'))
        $status=0;

    if(!mysql_query('query3'))
        $status=0;

    if(!mysql_query('query4'))
        $status=0;

    if($status)
        mysql_query('commit;');


}

چندین راه دیگه هم هست یادم باشه یه مقاله بنویسم !

لطفا بقیه راه ها رو هم توضیح بدید.
 

phpweb

Active Member
باید تراکنش تعریف کنید ! مثل سیستم های بانکی که مثلا وقتی شما کارت به کارت میکنی از حساب یه نفر کم میشه و به حساب یکی دیگه اضافه میشه حالا اگر که این وسط یکیش اجرا بشه و دومی به هر دلیلی اجرا نشه مبلغ کسر شده از کارت برگشت داده میشود !

موفق باشید

فرض کنید که می خواید که ردیف اول یک جدول رو آپدیت کنید و ردیف دوم جدول دیگه ای رو همزمان آپدیت کنید، لطفا کوئری این کار رو برام ارسال کنید.
 

k2-4u

Well-Known Member
PHP:
if(mysql_query('begin;')){
    
    $status=1;

    if(!mysql_query('UPDATE .....'))
        $status=0;

    if(!mysql_query('UPDATE.....'))
        $status=0;

    if($status)
        mysql_query('commit;');


}
 

phpweb

Active Member
PHP:
if(mysql_query('begin;')){
    
    $status=1;

    if(!mysql_query('update .....'))
        $status=0;

    if(!mysql_query('update.....'))
        $status=0;

    if($status)
        mysql_query('commit;');


}

راستش متوجه منظور کد ارسالی شما نشدم. اگه کارکرد کد فوق رو توضیح بدید خیلی عالیه
 

farik

Well-Known Member
با سلام..
یک راه خیلی راحت هم استفاده از ';' است..البته مثل روش های دوستان اینطوری نیست که اگه یکیش اجرا نشد اون یکی هم اجرا نشه..به هر حال اینم یک روشه..بستگی به کاربردتون داره..
 

phpweb

Active Member
با سلام..
یک راه خیلی راحت هم استفاده از ';' است..البته مثل روش های دوستان اینطوری نیست که اگه یکیش اجرا نشد اون یکی هم اجرا نشه..به هر حال اینم یک روشه..بستگی به کاربردتون داره..

این روش برای من مناسب نیست.
 

MMSHFE

Active Member
با سلام، درسته كه MySQL به محض شروع اجراي يك Query روي جدول قفل ميگذاره و بقيه Queryها رو تا وقتي كه Query جاري تمام نشده، توي صف نگه ميداره ولي يك راه براي كار شما وجود داره و اون هم استفاده از Trigger هست. البته در Trigger هم Queryها به ترتيب اجرا ميشن ولي مزيتي كه داره اينه كه به محض برقرار شدن شرط (مثلاً اضافه شدن يك ركورد به يك جدول خاص)، Query مشخصي رو اجرا ميكنه و نياز نيست خودتون اين كار رو انجام بدين و اين كار توسط MySQL انجام ميشه و تقريباً ميشه گفت همزمان عمل ميكنه، چون كد بررسي شرط و اجراي دستورات روي يك كامپيوتر هست (سرور) و درنتيجه فقط با CPU و RAM كار ميكنه و تقريباً آني انجام ميده.
موفق و مؤيد باشيد.
 

phpweb

Active Member
با سلام، درسته كه MySQL به محض شروع اجراي يك Query روي جدول قفل ميگذاره و بقيه Queryها رو تا وقتي كه Query جاري تمام نشده، توي صف نگه ميداره ولي يك راه براي كار شما وجود داره و اون هم استفاده از Trigger هست. البته در Trigger هم Queryها به ترتيب اجرا ميشن ولي مزيتي كه داره اينه كه به محض برقرار شدن شرط (مثلاً اضافه شدن يك ركورد به يك جدول خاص)، Query مشخصي رو اجرا ميكنه و نياز نيست خودتون اين كار رو انجام بدين و اين كار توسط MySQL انجام ميشه و تقريباً ميشه گفت همزمان عمل ميكنه، چون كد بررسي شرط و اجراي دستورات روي يك كامپيوتر هست (سرور) و درنتيجه فقط با CPU و RAM كار ميكنه و تقريباً آني انجام ميده.
موفق و مؤيد باشيد.

با توجه به مطلب شما، سیستمهای بانکی از Triggerاستفاده می کنن؟

لطفا یه منبع فارسی برای آموزش Trigger معرفی کنید.
 

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

بالا