例如,我想随时了解用户在数据库中搜索的最热门记录。
我希望对于每条记录,我都需要引入一个新的数字字段。因此,记录将是这样的:
key - value - counter
如何增加数据库中计数器的值?
我认为这就像在查询时调用存储过程,但我不确定。也许这个问题很简单,我只是一个初学者,在这种情况下我很抱歉。
例如,我想随时了解用户在数据库中搜索的最热门记录。
我希望对于每条记录,我都需要引入一个新的数字字段。因此,记录将是这样的:
key - value - counter
如何增加数据库中计数器的值?
我认为这就像在查询时调用存储过程,但我不确定。也许这个问题很简单,我只是一个初学者,在这种情况下我很抱歉。
首先,这听起来像是一个可怕的性能问题。每次选择记录时,如果您使用单个数字跟踪选择,则必须更新它,该数字仅存储总选择,否则您必须将带时间戳的值插入另一个表才能分析何时读取行。
无论如何,您可以使用通用表表达式执行此操作,在该表达式中更新表中的计数器并将结果返回到主查询:http ://sqlfiddle.com/#!1/1aa41/6
代码如下:
create table my_table(col1 varchar(30), col2 numeric, select_count numeric);
insert into my_table values ('A',1,0);
insert into my_table values ('B',2,0);
insert into my_table values ('C',3,0);
insert into my_table values ('D',4,0);
insert into my_table values ('E',5,0);
with upd as (
update my_table
set select_count = select_count+1
where col1 = 'A'
returning *)
select *
from upd;
with upd as (
update my_table
set select_count = select_count+1
where col1 = 'B'
returning *)
select *
from upd;
with upd as (
update my_table
set select_count = select_count+1
where col1 = 'A'
returning *)
select *
from upd;
with upd as (
update my_table
set select_count = select_count+1
returning *)
select count(*)
from upd;
with upd as (
update my_table
set select_count = select_count+1
returning *)
select sum(col2)
from upd;
with upd as (
update my_table
set select_count = select_count+1
returning *)
select *
from upd;
您应该为此使用触发器。触发器是在事件上执行的命令,每次执行或语句时INSERT
,即使它们的调用不修改任何记录。因此,当您(读取)记录时,您无法直接创建用于更新记录字段的触发器。UPDATE
DELETE
count
SELECT
但是,您可以尝试一种解决方法,其中您的表中也有一个日期字段,并在每次调用记录时更新它。使用您的应用程序将此日期时间值发送到数据库,这将触发UPDATE
.
通过UPDATE
声明,您的触发器被调用,这样您就可以添加代码来修改count
列。
CREATE TRIGGER tafter AFTER INSERT OR DELETE ON tbl1 FOR EACH ROW UPDATE SET counter = counter + 1 where key = 'keyval';