MySQL数据库设计和高效查询

3

我有以下数据表:

users (id, first_name, last_name)

category (id, name)

rank(id, user_id, rank)

每个用户可以属于多个类别。所有用户都在排名表中,其值介于0.0和1.0之间,其中0是最低排名,1是最高排名。我想设置额外的表格来创建以下网页:
页面访问者(通过用户表中记录的任一ID或其IP地址的数字表示)选择一个类别,并显示两个从用户表中随机选择的用户,以满足以下条件:
1)访问者user_id在24小时内没有看到这对配对。
2)两个用户属于所选类别。
3)两个用户在1个等级值以内。让我解释一下最后一个标准-如果排名排序,那么选择的两个用户将具有相邻的排名。
这是一个难题,我无法找出如何有效地解决它。
我真的很感激任何关于此问题的帮助。
谢谢

等级是字符串还是数字? - Jericon
2个回答

0

你只需要再加入两个表,剩下的就可以放在你的网站逻辑中了。

user_category(user_id, category_id)
user_pairing(first_user_id, second_user_id, last_seen)

第一张表用于表示用户和类别之间的多对多关系,第二张表用于用户配对。


0

我同意@Yasel的说法,我想补充一点,你可能需要另一个表格

candidate(first_user_id, second_user_id);

此表用于预先计算每个用户的候选人,此candidate表每小时/每天都会预填充,因此当分配每个first_user_id, second_user_id时,该对将从candidate表中删除并移至user_pairing表中。因此,每次您只需要查询candidate表即可,这应该是有效的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接