2013-05-03 3 views
0

Например, я хочу узнать в любой момент самые популярные записи, которые пользователи искали в базе данных.Как сохранить в базе данных количество вызовов каждой записи?

Я ожидаю, что для каждой записи мне нужно ввести новое поле чисел. Таким образом, запись будет выглядеть следующим образом:

key - value - counter 

Как я могу увеличить значение счетчика внутри базы данных?

Я думаю, что это что-то вроде вызова хранимой процедуры во время запроса, но я не уверен. Возможно, вопрос довольно прост, я просто новичок, и я приношу свои извинения в этом случае.

+0

Наиболее общие поисковые запросы (или ключевые слова для поиска) или наиболее распространенные результаты? – user2246674

+0

@ user2246674 наиболее распространенные результаты –

+0

Точно, триггер (специальный вид хранимой процедуры) - это то, что вам нужно, и это способ сделать это. –

ответ

1

Для этого следует использовать триггер. Триггеры - это команды, которые выполняются в событиях, каждый раз выполняется инструкция, UPDATE или DELETE, даже если их вызовы не изменяют никаких записей. Из-за этого вы не можете напрямую создать триггер для обновления поля записи count, когда вы SELECT (читаете) его.

Но вы можете попробовать обходное решение, в котором у вас также есть поле даты в вашей таблице, и обновлять его каждый раз, когда вызывается запись. Используйте свое приложение для отправки этого значения datetime в базу данных, которое вызовет UPDATE.

С помощью оператора UPDATE вызывается ваш триггер, и таким образом вы можете добавить свой код, чтобы изменить колонку count.

CREATE TRIGGER tafter AFTER INSERT OR DELETE ON tbl1 FOR EACH ROW UPDATE SET counter = counter + 1 where key = 'keyval'; 
+0

ОП отметит свой пост postgresql. – hd1

+0

Большое спасибо !!! –

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; 
+0

Это замечательно! Благодаря! –

Смежные вопросы