Hello Listies,

Given: MySQL 4.0.12, I need to implement a pageview log with a
resolution of 1 day.

I propose this table:

CREATE TABLE `pageviews` (
  `id` int(11) NOT NULL auto_increment,
  `date` date NOT NULL default '0000-00-00',
  `url` char(120) NOT NULL default '',
  `views` mediumint(9) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `date` (`date`,`url`),
  KEY `url` (`url`)
) TYPE=InnoDB;


So that an update will look like:
 > UPDATE pageviews SET views=views+1 WHERE date='<DATE>' AND
url='<ARTIST>'

Of course I need to INSERT the record if one does not match my WHERE.
This would be easy if I had 4.1 -- "INSERT ... ON DUPLICATE KEY UPDATE",
I think -- but I do not. 

So, how should I write my queries so that when a new day dawns, I don't
have 2 connections racing to INSERT?

I suspect I could do something like this (in PHP, line numbers added:

01  $link = connect2Db();
02  $sql = "SELECT * FROM pageviews WHERE date='<DATE>' AND
url='<ARTIST>' LOCK IN SHARE MODE";
03  if ( mysql_num_rows(mysql_query($sql,$link)) ) {
04      // UPDATE
05  } else {
06      // INSERT
07  }


Also, should I explicitly "mysql_query('COMMIT',$link)" on line 8?

Thanks all!

--
wellington

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to