Все работает хорошо, за исключением того, что я должен проверять только обновить существующую запись, если оценка базы данных < новый счет. Когда я добавлю ГДЕ счет < : у меня проблемы. Как добавить условие, чтобы проверить, что оценка базы данных меньше новой оценки?
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();
}
}
Это то, что вы хотите?
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);
Я думаю, что это должно работать. Чем больше существующее и новое значение используется для обновления. в 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');