MySQL数据库设计和高效查询

时间:2011-11-04 00:58:52

标签: mysql database-design

我有以下表格:

users (id, first_name, last_name)

category (id, name)

rank(id, user_id, rank)

每个用户都可以属于多个类别。并且所有用户都在排名表中,其值介于0.0和1.0之间,其中0是最低排名,1是最高排名。我想设置其他表来创建以下网页:

页面的访问者(由用户表中的任何一个记录的ID标识,或者其IP地址的数字表示)选择一个类别,并从users表中随机选择两个用户,这样: / p>

1)访问的user_id在24小时内没有看到此配对

2)两个用户属于所选类别

3)两个用户在彼此的1级值之内。让我解释一下最后一个标准 - 如果排名是排序的,那么两个选定的用户将具有相邻的排名。

这是一个艰难的,我不能为我的生活弄清楚如何有效地做到这一点

我非常感谢这方面的任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

你只需要两张桌子,剩下的就是你的网站逻辑。

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

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

答案 1 :(得分:0)

我同意@Yasel,我想补充一点,你想要另一张桌子

candidate(first_user_id, second_user_id);

此表用于预先计算每个用户的候选人,此candidate表每小时/每天预填充一次,因此当分配每个first_user_id, second_user_id时,此对将从{{1 }表并移入candidate表。所以每次你只需要查询user_pairing表应该是有效的。