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 -кода.

Таким образом, в основном иногда ряд с уникальным знаком не существует в БД, так как я могу сделать приведенное выше утверждение, если существует, а если он не делает что -то вроде этого:

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