Еще один способ «INSERT INTO», если не существует - PullRequest
1 голос
/ 20 июня 2011

Я сделал что-то, и я хотел бы знать, есть ли другой способ сделать это

$this = $CURUSER["id"];
mysql_query("UPDATE wuploaders SET uploads=uploads+1 WHERE userid=$this") or die(mysql_error());         
if (mysql_affected_rows() == 0)
    mysql_query("INSERT INTO wuploaders (userid, uploads) VALUES ('$this','1')") or die(mysql_error()); 

Всего наилучшего, Замфир

Ответы [ 3 ]

8 голосов
/ 20 июня 2011
INSERT INTO wuploaders (userid, uploads) VALUES ('$this','1') 
ON DUPLICATE KEY UPDATE uploads = uploads+1

Это будет работать, если идентификатор пользователя является уникальным / первичным ключом

0 голосов
/ 20 июня 2011

В дополнение к синтаксису INSERT..ON DUPLICATE KEY UPDATE, который упоминали другие, иногда целесообразно использовать REPLACE.Это в основном УДАЛЕНИЕ строки, за которым следует ВСТАВКА новых значений.

Это имеет некоторые побочные эффекты, такие как запуск триггера удаления и вставки.На него также распространяются ограничения ссылочной целостности, поэтому, если есть какие-либо дочерние строки, ссылающиеся на заменяемую строку, либо REPLACE завершится ошибкой, либо удаление будет каскадным, а также удалит дочернюю строку.

Тамеще бывают времена, когда ЗАМЕНА удобна, но помните об этих проблемах.

0 голосов
/ 20 июня 2011

Если у вас уже есть счетчик загрузок, вы также можете использовать REPLACE .

REPLACE INTO wuploaders (userid, uploads) VALUES ($userid, $count);

Решение @ a1ex07 может быть хорошим в любом случае:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...