【问题标题】:MySQL Database design and effecient queryMySQL数据库设计和高效查询
【发布时间】:2011-12-21 16:11:45
【问题描述】:

我有以下表格:

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 以内。让我解释一下最后一个标准 - 如果对排名进行排序,则两个选择的用户将具有相邻的排名。

这很难,我一辈子都想不出如何有效地做到这一点

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

谢谢

【问题讨论】:

  • 排名是字符串还是数字?

标签: mysql database-design


【解决方案1】:

您只需要另外两个表,其余的则进入您的网站逻辑。

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

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

【讨论】:

    【解决方案2】:

    我同意@Yasel,我想补充一点,您确实想要另一个桌子

    candidate(first_user_id, second_user_id);
    

    此表用于预先计算每个用户的候选者,此candidate 表每小时/每天预填充一次,因此当分配每个first_user_id, second_user_id 时,这对从candidate 表中删除并移入user_pairing 表。所以每次只需要查询candidate表,应该是高效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 2012-02-26
      • 2020-05-14
      相关资源
      最近更新 更多