電子書劃線篩選

在前面的內容中,提到了存儲用戶電子書劃線的表(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做爲劃線的位置;若是不相交,說明前面的數據能夠做爲一條獨立的劃線,繼續開始下一次循環。

針對新數據的處理,相對會比較麻煩。任何一條新的劃線筆記,均可能影響到兩條既存的筆記。由於,它可能和兩條本來獨立的劃線筆記,發生相交的可能。遍歷

相關文章
相關標籤/搜索