MySQL Как вставить новую запись или обновить поле в зависимости от того, существует ли оно? - PullRequest
2 голосов
/ 10 января 2010

Я пытаюсь внедрить систему рейтингов, в которой я храню следующие два поля в моей таблице базы данных:

рейтинг (текущий рейтинг) num_rates (количество рейтингов, представленных на данный момент)

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

переменные из моего кода PHP.

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

INSERT INTO `mytable`
   SET rating=$theRating, num_rates=1, uniqueCol=$uniqueCol

1 Ответ

4 голосов
/ 10 января 2010

Посмотрите на INSERT ... ON DUPLICATE KEY UPDATE .

Это должно выглядеть примерно так:

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;

Убедитесь, что на вашем uniqueCol.

есть UNIQUE index или PRIMARY KEY.
...