Ben sitede bir şeyler yapmak için kullanıcıları ödüllendiren bir (PHP / MySQL) sistemi var. Sorunun aşkına, bir kullanıcı yaptıkları her 5 yorumlar için bir gül alır diyelim.
Ön sayfa bugün kazanılan kaç gül gösteren bir sayaç var ve kaç güller tüm zaman kazandık edilmiştir. Kaba mantığı aşağıda verilmiştir:
//Save a single, discrete event. $user --> numerical value, 1:1.
function first($user) {
//save values related to $user into TABLE_1;
return second($user);
}
//Calculate the sum() of all numerical events for $user for today and save that.
function second($user) {
//save values calculated from TABLE_1 into TABLE_2;
return third();
}
//Calculate the sum() of all numerical events for all users
function third() {
//save values calculated from TABLE_2 into TABLE_3;
return true/false;
}
Yorum kaydedildiğinde, first() function başladı edilir. (1 Yorum kaydedildiğinden beri, 1) kullanıcı kimliği, olayın sayısal değeri ve zaman damgası: first() table_1 bir satır olarak açıklama olayın kaydını kaydeder.
Daha sonra, second() denir; Uid, roses_today, timestamp: kullanıcı bu açıklama ile bir gül kazandı ve table_2 3 değerlerini kaydeder ise second(), bazı matematik anlamaya gelmez.
Bu berbat vurmayacak değerdir. Nedense, roses_today değeri bazen yüksek olması ve bazen daha düşük olan, olması gereken ne değişir. Hiçbir model var - bazı değerler bazı sağda, bazıları zorlukla çok düşük, çılgınca yüksek; Burada kafiye ya da neden yok.
Ayrıca eserlerinde bir anahtar atma: Ararsam second($user) elle, table_2 yılında bu hesaplar değerler ve mağazalar doğru. Bu işlev, gerçek-zamanlı olarak çağrıldığını eğer sadece başarısız görünüyor.
Edit: Those suggesting it's a problem with the code that isn't there or that I should step through the code, please read the previous paragraph. This function seems to only fail if it's being called in real-time. Calling the very same function manually produces correct results.