电子书划线筛选

在前面的内容中,提到了存储用户电子书划线的表(table_user),表结构以下。其中,start_point表示用户划线在对应章节中的起始位置,end_point表示结束位置。code

id user_id ebook_id chapter start_point end_point

如今,咱们要针对电子书出一个划线表(table_book),表结构跟上面的相似,去掉user_id便可。table_book的对象主体是电子书,存储全部用户在电子书上的划线区间。对象

目前,table_user数据已经存在,而table_book是新建的。咱们要对用户的笔记作筛选、汇总,将过滤后的数据写入table_book表。有两个工做要作:table

  • 处理用户既存的老数据,写入table_book
  • 用户的新数据,处理后,写入table_book

针对老数据的处理,描述一个简单的处理策略:若是用户划线相交,取并集。处理思路以下:循环

  1. 过滤获取电子书的全部数据
  2. 将数据按照start_point ASC, end_point ASC的顺序排列
  3. 遍历每条划线数据,跟前一条划线作比较,若是二者相交,取并集,获取并集的start_pointend_point做为划线的位置;若是不相交,说明前面的数据能够做为一条独立的划线,继续开始下一次循环。

针对新数据的处理,相对会比较麻烦。任何一条新的划线笔记,均可能影响到两条既存的笔记。由于,它可能和两条本来独立的划线笔记,发生相交的可能。遍历

相关文章
相关标签/搜索