电子书划线筛选
在前面的内容中,有提到存储用户电子书划线的表(table_user
),表结构如下所示。其中,start_point
表示用户划线在对应章节中的起始位置,end_point
表示结束位置。
id user_id ebook_id chapter start_point end_point
现在,我们要以电子书为主体,新建一个划线表(table_book
),存储所有电子书上的划线区间。表结构跟上面类似,去掉了user_id
字段,这里就不再赘述。
目前,table_user
数据已经存在,而table_book
是新建的。我们要对用户的笔记做筛选、汇总,将过滤后的数据写入table_book
表。有两个工作要做:
- 处理用户既存的老数据,写入
table_book
表 - 用户的新数据,处理后,写入
table_book
表
针对老数据的处理,使用简单的处理策略:如果用户划线相交,取并集。处理思路如下:
- 过滤获取电子书的所有用户划线(
table_user
)数据 - 将数据按照
start_point ASC, end_point ASC
的顺序排列 - 遍历每条划线数据,跟前一条划线做比较,如果两者相交,取并集,获取并集的
start_point
、end_point
作为划线的位置;如果不相交,说明前面的数据可以作为一条独立的划线,继续开始下一次循环。 - 将独立的划线,写入到
table_book
表中
针对新数据的处理,相对会比较麻烦。任何一条新的划线笔记,都可能影响到两条既存的笔记。因为,它存在和两条原本独立的划线笔记,发生相交的可能。
以上是 电子书划线筛选 的全部内容, 来源链接: utcz.com/z/514557.html