遇到这个问题,即使它已经 5 岁了,也许有人会对以下方法感兴趣。
- 成就通常被分解为数字(其余的,如名称,每个成就的描述可以放在站点/应用程序核心以避免膨胀数据库)。
- 简单点,我们不是 FB,不需要单独的表格,所以在“users”表格中我们只添加 1 个单列:“Achievements”它是一个 varchar(50)。括号中的数字 (50) 将取决于您对该列的实际需求(即它存储了多少数据)。
- 所以你最终在成就列的每个单元格中都有一个数字序列:10982039482084109384
从左到右阅读这行数字如下:用户已达到“1098 个个人资料浏览量”,收到“2039 个赞”等。可选地,添加一个分隔符以便于区分 + 以在第一个用户有 25 个赞时立即处理案例,然后是 125,然后是 2039(2 位、3 位、4 位 - 或者另一种选择是使用 0025,然后是 0125,然后是 2039,因为您知道每个成就的最大位数是 4)。但是仍然可以说我们决定使用分隔符,即逗号:
1098,2039,4820,8410,9384
然后,一旦您需要数据,只需选择属于特定用户 ID 的成就,然后(如果您添加了分隔符)
explode (',', $array)
那么您的网站 php 核心知道前 4 位数字代表“个人资料视图”,并且可以说这意味着他有一个 10 级徽章用于个人资料视图(1 个徽章代表 100 个视图)。
在此之上,您可以轻松地进行操作,而无需进一步的 SQL 查询。例如,用户想知道他获得 20 级徽章的进度,您显示:他有 1098/2000(或 55%)的进度。
此时,成就描述、名称、级别信息存储在站点核心中,而百分比则在移动中计算。
希望逻辑清晰,并且可能对社区中的任何人有用。
干杯!