Вы должны использовать нормализованную схему, и пусть SQL и ядро базы данных будут вашими друзьями.Создайте одну таблицу с таким дизайном:
create table KeywordUse
( AppID int
, UserID int
, Sequence int
, Word varchar(50) -- or whatever makes sense
)
Вы также можете иметь первичный ключ идентификации, если хотите, но AppID + UserID + Sequence является ключом-кандидатом (т.е. комбинация этих трех должна бытьуникально).
Чтобы найти 5 ключевых слов для любого приложения, выполните SQL-запрос, подобный следующему:
select top 5
count(AppID) as Frequency -- If you have an identity PK count that instead.
, Word
from KeywordUse
where AppID = @AppIDVariable...
group by Word, AppID
order by count(AppID) desc
Если вы действительно, действительно беспокоитесь о производительности, вы можете денормализовать результатыэтот запрос в таблицу, которая показывает слова для каждого приложения.Тогда вам нужно решить, как часто нужно обновлять этот снимок.
ПЕРЕСМОТРЕННЫЙ ОТВЕТ:
Как великодушно отметил Ник Джонсон, агрегатные функции недоступны в GQL.Однако философия моего ответа остается неизменной. Пусть ядро базы данных выполнит свою работу.
Таблица должна быть AppID, Word и Frequency.(AppID и Word - это PK.) Затем каждое использование слова будет складываться по мере его применения.Затем, когда вы хотите узнать первые пять слов для приложения, которое вы выбираете по AppID: = @Value и упорядочьте по частоте (по убыванию) с LIMIT = 5.
Для отслеживания пользователя потребуется отдельная таблица.ключевые слова, если это важно.