У меня возникла эта проблема при проверке условия для обновления таблицы в PostgreSQL. Он должен проверить, загрузил ли пользователь это один раз, и если да, добавить +1 в acessos
.
<?php
$result2 = pg_query("SELECT * from downloads WHERE (nome = $_POST[nome_download] AND email = $_POST[email_download])");
if (pg_num_rows($result2) == 0){
$result = pg_query("INSERT INTO downloads (nome, email, estado, arquivo, acessos) VALUES ('$_POST[nome_download]','$_POST[email_download]','$_POST[estado_download]','$_SESSION[nome_arquivo_download]','1')");
}else{
$arr[acessos] = $arr[acessos] + 1;
$result = pg_query("UPDATE downloads SET acessos = $arr[acessos] WHERE (nome = $_POST[nome_download] AND email = $_POST[email_download])");
}
if (!$result){
echo "Não foi possível realizar o cadastro. Tente fazer o download mais tarde.";
}
else
{
echo "soft_bd";
pg_close();
}
?>
select
. Запуститеupdate
в качестве первого оператора. Если ни одна строка не была обновлена, запустите вставку. Или если всего несколько пользователей скачивают что-то более одного раза, то сначала запустить вставку, поймать ошибку уникального ключа и сделать обновление. Какой из них быстрее, зависит от того, что происходит чаще: обновление или вставка. Если вы можете перейти на Postgres 9.5, вы можете использоватьinsert .. on conflict update
, который делает все это безопасным для транзакций способом. - person a_horse_with_no_name   schedule 03.01.2016