## SQL table schema: $sql = "create table if not exists views ( bucket integer, id integer null, views integer DEFAULT (0) );"; #### sub api_get_views { my $id = shift; my $increment = shift; ## get views so far my $views = database->prepare("SELECT * FROM views WHERE id = ?; ") or error database->errstr; $views->execute( $id ); my ($today_bucket) = split(/\s/, HTTP::Date::time2iso()); $today_bucket =~ s/-//g; my $cnt=0; my $bucket_exists; while( my $bucket = $views->fetchrow_hashref ){ $cnt += $bucket->{views}; $bucket_exists = 1 if $bucket->{bucket} == $today_bucket; } if($increment){ if($bucket_exists){ my $views = database->prepare("UPDATE views SET views = views + 1 WHERE bucket = ? AND id = ?; ") or error database->errstr; $views->execute( $today_bucket, $id ); }else{ my $views = database->prepare("INSERT INTO views (bucket,id,views) VALUES (?,?,?); ") or error database->errstr; $views->execute( $today_bucket, $id, 1 ); } $cnt++; } return $cnt; }