Salve ragazzi, ho un problema quasi inspegabile con una semplice operazione di conteggio record e insert/update in base al risultato.
Mi spiego commentando il codice che posto per essere più chiaro possibile nella speranza che qualcuno possa illuminarmi ed evitare di cambiare il sistema.
Codice PHP:
//Questo è commentato ho sostituito con la query successiva
//$querySql_stats = "SELECT * FROM banner_stats WHERE id_banner = ".$id_banner."";
//$result_stats = $dbConn->query($querySql_stats);
//$rows_count_result = $dbConn->num_rows;
//Qui faccio una query che conta i record in base ad un id_banner per verificare se già esiste il record nella tabella
$querySql_stats = "SELECT COUNT(id) FROM banner_stats WHERE id_banner = ".$id_banner."";
$result_stats = $dbConn->query($querySql_stats);
$row_stats = $result_stats->fetch_row();
$row_cnt = $row_stats[0];
$rows_count_result = $row_cnt;
//echo "
querySql_stats:".$querySql_stats;
//echo "
row_stats:".$row_stats;
//echo "
rows_count_result:".$rows_count_result;
//Se il record già esiste faccio una update per conteggiare le impression, altrimenti procedo a fare insert.
if ($rows_count_result == 1) {
while (($row_data_stats = $result_stats->fetch_assoc()) !== NULL) {
$impression = $row_data_stats['impression'];
$count_impression = $impression + 1;
$querySql_stats = "UPDATE banner_stats SET impression = ".$count_impression." WHERE id_banner = ".$id_banner."";
//$result = $dbConn->query($querySql_stats);
};
} elseif ($rows_count_result == 0) {
if ($id_banner > 0) {
$querySql_stats = "INSERT INTO banner_stats (id_banner,impression,click,data) VALUES ";
$querySql_stats .= "(".$id_banner.",1,0,".$serialDate.")";
//$result = $dbConn->query($querySql_stats);
};
} else {
$querySql_stats = "INSERT INTO banner_stats (id_banner,impression,click,data) VALUES ";
$querySql_stats .= "(".$id_banner.",0,0,".$rows_count_result.")";
//$result = $dbConn->query($querySql_stats);
};
Ebbene purtroppo anche se il record già esiste in tabella, a volte inspegabilmente entra nella insert e mi trovo record duplicati con lo stesso id_banner come di seguito riporto.
id / id_banner / impression / click / data
78 100 1 0 1309600162
110 100 1 0 1309600181
121 100 1 0 1309600182
Escludendo un problema di concomitanza, infatti le date sono diverse. Cosa potrebbe essere ? Suggerimenti ? Grazie in anticipo....