例如,我想知道用户在数据库中搜索过的最流行的记录。
我希望每个记录都需要引入一个新的数字字段。因此,记录将是这样的:
key - value - counter
如何在数据库中增加计数器的值?
我认为这类似于在查询时调用存储过程,但我不确定。也许这个问题很简单,我只是一个初学者,我在这种情况下道歉。
答案 0 :(得分:1)
您应该使用触发器。触发器是每次执行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';
答案 1 :(得分:1)
首先,这听起来像是一个糟糕的性能问题。每次选择记录时,如果您使用单个数字跟踪选择,只需存储总选择,则必须更新记录,否则您必须将时间戳值插入另一个表中,以便能够分析何时读取行。
无论如何,您可以使用公用表表达式来执行此操作,在表达式中更新表中的计数器并将结果返回到主查询: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;