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

Mohammadreza

Well-Known Member
برای مثال شما می خواهید در یک جدول سطری که 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 (151,150);

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

greencat

Member
سلام
با کوئری زیر هم فکنم بشه این کار رو انجام دادش نه :
کد:
query = "update table set id = (id+1) where (id>149) and (id<152)"

راستی این نوع کوئری که نوشتید اسم خاصی هم داری؟ منظورم استفاده از then و end در کوئری ها؟
ممنون از مطلبتون.
 

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

بالا