فقط خودم

نه تخت جم نه ملک سلیمانم آرزوست ، راهی به خلوت دل جانانم آرزوست

فقط خودم

نه تخت جم نه ملک سلیمانم آرزوست ، راهی به خلوت دل جانانم آرزوست

به روز کردن چند سطر از دیتابیس با مقادیر متفاوت در یک کوئری

  

برای مثال شما می خواهید در یک جدول سطری که ID اون برابر با 150 هست رو تبدیل به 151 کنید و همچنین همزمان سطری که ID اون برابر 160 هست رو برابر 161 کنید...

- استفاده از دو کوئری :

در اینجا اولین فکری که به ذهن میرسه استفاده از دو کوئری به جای یک کوئری هست که تقریبا تصمیم عاقلانه ای هم هست...

- ایراد :

اما اگر تصمیم داشته باشید ID که 150 هست رو به 151 و ID که 151 هست رو به 150 تبدیل کنید با دو کوئری به مشکل بر می خورید...

چرا ؟

به دلیل اینکه در کوئری اول 150 به 151 تبدیل می شه و حالا دو سطر با ID که 151 هست داریم و حالا نوبت کوئری دوم هست که 151 رو تبدیل به 150 کنه

چه اتفاقی می افته ؟... هر دو سطر تبدیل به 150 میشه

و اینجا ما به خواستمون نمی رسیم ... (تبدیل 150 به 151 و تبدیل 151 به 150 همزمان )

اگه فیلد ID به صورت PRIMARY KEY باشه که دیگه در همون کوئری اول به مشکل بر می خوریم ،  زیرا داده تکراری نمی پذیرد ... و هیچکدام از کوئری اول و دوم اجرا نمی شود

- راه حل :


UPDATE `TABLE`
SET id = CASE id
WHEN 151 THEN 150
WHEN 150 THEN 151
END
WHERE id IN (1,2);


- کاربرد :

یکی از نمونه های پرکاربرد این مسئله در طراحی ترتیب برای قرار گیری منو یا مطالب در سایت هست ...