电子书划线筛选

编程

在前面的内容中,有提到存储用户电子书划线的表(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

针对老数据的处理,使用简单的处理策略:如果用户划线相交,取并集。处理思路如下:

  1. 过滤获取电子书的所有用户划线(table_user)数据
  2. 将数据按照start_point ASC, end_point ASC的顺序排列
  3. 遍历每条划线数据,跟前一条划线做比较,如果两者相交,取并集,获取并集的start_pointend_point作为划线的位置;如果不相交,说明前面的数据可以作为一条独立的划线,继续开始下一次循环。
  4. 将独立的划线,写入到table_book表中

针对新数据的处理,相对会比较麻烦。任何一条新的划线笔记,都可能影响到两条既存的笔记。因为,它存在和两条原本独立的划线笔记,发生相交的可能。

以上是 电子书划线筛选 的全部内容, 来源链接: utcz.com/z/514557.html

回到顶部