PDO Inert Into на дубликат ключа с условием не работает

Все работает хорошо, за исключением того, что я должен проверять только обновить существующую запись, если оценка базы данных < новый счет. Когда я добавлю ГДЕ счет < : у меня проблемы. Как добавить условие, чтобы проверить, что оценка базы данных меньше новой оценки?

try {
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare('INSERT INTO UserTable (fb_id, level, score, star, timestamp) ' .
'VALUES(:fb_id, :level, :score, :star, :timestamp)' .
'ON DUPLICATE KEY UPDATE score= :score, timestamp= :timestamp WHERE score < :score');
//WHERE score < $score
$stmt->bindParam(':fb_id', $fb_id);
$stmt->bindParam(':level', $level);
$stmt->bindParam(':score', $score);
$stmt->bindParam(':star', $star);
$stmt->bindParam(':timestamp', $current_time);
$stmt->execute();
echo "New record created successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
}

1

Решение

Это то, что вы хотите?

INSERT INTO UserTable (fb_id, level, score, star, timestamp) ' .
VALUES(:fb_id, :level, :score, :star, :timestamp)' .
ON DUPLICATE KEY UPDATE
score = GREATEST(:score, score),
timestamp = (CASE WHEN :score > score THEN :timestamp ELSE timestamp END);
1

Другие решения

Я думаю, что это должно работать. Чем больше существующее и новое значение используется для обновления. в MAX() функция, score относится к существующей стоимости, и VALUES(score) относится к новому значению.

$stmt = $conn->prepare('INSERT INTO UserTable (fb_id, level, score, star, timestamp) ' .
'VALUES(:fb_id, :level, :score, :star, :timestamp)' .
'ON DUPLICATE KEY UPDATE score = GREATEST(score, VALUES(score)), timestamp= :timestamp');
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector