[Zope] Re: ZSQLMethod conditional insert

2005-07-27 Thread Christian Scholz
Hi!

Might something like this help?

INSERT INTO table (a,b,c) VALUES (1,2,3)
   ON DUPLICATE KEY UPDATE c=c+1;

So this will catch errors and instead do the update.
Available from version 4.1.0 on as the docs say.

See also the docs:

http://dev.mysql.com/doc/mysql/en/insert.html

-- christian

PS: I might have misunderstood something ;-)


Thomas Olsen wrote:
 Hi
 
 This is probably an FAQ but I haven't been able to find and answer.
 
 I need a counter for a certain CMFType and want to store the hits in a MySQL 
 database not to fill up the ZODB. I've checked to two suggestions below but 
 they both use two ZSQLMethods first to check if the URL is already in the 
 table, then to do the actual update or insert.
 
 http://www.zope.org/Members/element/Simple_SQL_Page_Counter
 http://zopelabs.com/cookbook/991116439
 
 I'd like to be able to do that just in one ZSQLMethod for efficiency but I 
 cant seem to figure out a way of doing it.
 
 The table is very simple:
 
 CREATE TABLE mostread (
   path varchar(255) NOT NULL default '',
   num bigint(20) NOT NULL default '0',
   dt datetime NOT NULL default '-00-00 00:00:00',
   PRIMARY KEY  (path)
 )
 
 For now my ZSQLMethod get the argument path which is a relative URL and it 
 looks like this:
 
   select @lastval:=num from mostread where dtml-sqltest path type=string
   dtml-var sql_delimiter
   update mostread set [EMAIL PROTECTED], dt=now() where dtml-sqltest path 
 type=string;
   /dtml-if
 
 But that naturally only works if there is already a record containing path. 
 What I want to do is something like this (pseudo-code):
 
   select @lastval:=num from mostread where dtml-sqltest path type=string
   dtml-var sql_delimiter
   dtml-if sequence-length  0
 update mostread set [EMAIL PROTECTED], dt=now() where dtml-sqltest path 
 type=string;
   dtml-else
 insert into mostread(path, num, dt)
   values(dtml-sqlvar path type=string, 1, now())
   /dtml-if
 
 Is there a way of doing this or should I just create that extra ZSQLMethod?
 

___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )


Re: [Zope] Re: ZSQLMethod conditional insert

2005-07-27 Thread Thomas Olsen
On Thursday den 28. July 2005 00:23, Christian Scholz wrote:
 INSERT INTO table (a,b,c) VALUES (1,2,3)
        ON DUPLICATE KEY UPDATE c=c+1;

Thanks - that was exactly what I needed

-- 
Med venlig hilsen

Thomas Olsen
http://www.headnet.dk
___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists -
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )