根据您的需要,在数据库级别有两种可能的方法:
使用聚合函数检索的排名
获取排名的查询:(假设每个事件都存储在 Person_Fruit 表中)
SELECT person, fruit, COUNT(*)
FROM person_fruit
WHERE person = 'the_person'
AND fruit = 'the_fruit'
GROUP BY 1, 2;
存储在数据库中的排名
假设表 Fruits(id、person、fruit、rank),在 person 和 fruit 上都有 multi-column index,所以每个唯一组合只有一次出现。
在INSERT/UPDATE之前,检查Person/Fruit是否已经存在:
SELECT id
FROM fruits
WHERE name = 'the_name' AND fruit = 'the_fruit';
如果不是,INSERT 排名值为1 的人/水果,因为这是第一次出现:
INSERT INTO fruits (id, person, fruit, rank)
VALUES (NULL, 'the_person', 'the_fruit', 1); /* NULL should be replaced by auto-generated value, if set up for that */
如果是,UPDATE 排名:
UPDATE fruits
SET rank = rank +1
WHERE id = id /* You can use id returned from previous `SELECT`, or Person AND Fruit */