Thanks everyone!
UPDATE 2012-08-03
Today, I had to implement this logic and it would be great to get some feedback, as I only got it working in a quite hackish way - especially I couldn't get the shorthand SQL part working so I had to resort to an if/else switch...
## 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 = vi
+ews + 1 WHERE bucket = ? AND id = ?; ") or error database->errstr;
$views->execute( $today_bucket, $id );
}else{
my $views = database->prepare("INSERT INTO views (bucket,i
+d,views) VALUES (?,?,?); ") or error database->errstr;
$views->execute( $today_bucket, $id, 1 );
}
$cnt++;
}
return $cnt;
}
|