MySQL كيفية إدراج سجل جديد أو تحديث حقل اعتمادا على ما إذا كان موجودا؟

StackOverflow https://stackoverflow.com/questions/2036794

سؤال

أحاول تنفيذ نظام تقييم حيث أحتفظ بالحقلين التاليين في جدول DB الخاص بي:

تصنيف (التصنيف الحالي) Num_rates (عدد التصنيفات المقدمة حتى الآن)

UPDATE `mytable`
   SET rating=((rating*num_rates)+$theRating)/num_rates, num_rates=num_rates+1
 WHERE uniqueCol='$uniqueCol'

المتغيرات هي من رمز PHP الخاص بي.

لذلك، في بعض الأحيان في بعض الأحيان، لا يوجد الخلاف مع Unquecol في DB، فكيف يمكنني أن أقوم بالبيان أعلاه إذا كان موجودا وإذا لم يفعل ذلك شيئا مثل هذا:

INSERT INTO `mytable`
   SET rating=$theRating, num_rates=1, uniqueCol=$uniqueCol
هل كانت مفيدة؟

المحلول

القي نظرة على إدراج ... على تحديث مفتاح مكررة.

يجب أن تبدو شيئا كهذا:

INSERT INTO mytable (rating, num_rates, uniqueCol)
VALUES ($theRating, 1, $uniqueCol)
ON DUPLICATE KEY UPDATE
  rating=((rating*num_rates)+$theRating)/num_rates,
  num_rates=num_rates+1;

تأكد من أن لديك UNIQUE index أو PRIMARY KEY على حسابك uniqueCol.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top