我有一個刮板,它定期從新聞網站上抓取文章並將它們存儲在數據庫[MYSQL]中。 刮削工程的方式是最古老的物品首先被刮掉,然後移動到更近的物品上。根據時間創建用於獲取動態數據的API端點
例如被寫入時間Jan的第一物品會被刮掉第一和給予ID 1並且對所1月2日的刮下的製品將具有ID 2。
所以最近的文章與舊文章相比會有更高的ID。
有多個鏟運機同時運行。
現在我需要一個端點,我可以根據文章的時間戳進行查詢,並且每次獲取都有10篇文章的限制。
的問題出現,例如當有20篇它被張貼與時間戳,當我查詢端點的時間戳進行檢查,給我所有的文章,是> = 1499241705在這種情況下,我總是會每次獲得相同的10篇文章,將條件更改爲>意味着我跳過11-20的文章。添加另一個where子句以檢查id不成功,因爲刮刀同時運行時可能無法始終以正確的日期順序插入文章。
有沒有一種方法可以查詢這個結束點,所以我總是可以從它得到一致的數據與最新的文章第一次,然後是舊的文章。
編輯:
+-----------------------+
| id | unix_timestamp |
+-----------------------+
| 1 | 1000 |
| 2 | 1001 |
| 3 | 1002 |
| 4 | 1003 |
| 11 | 1000 |
| 12 | 1001 |
| 13 | 1002 |
| 14 | 1003 |
+-----------------------+
最後的時間戳和ID正在通過WHERE子句發送。
E.g. $this->db->where('unix_timestamp <=', $timestamp); $this->db->where('id <', $offset); $this->db->order_by('unix_timestamp ', 'DESC'); $this->db->order_by('id', 'DESC');
查詢時間戳爲1003時,會提取ID 14和4。但是在接下來的調用中,id 4就是偏移量,因此不會獲取id 13,而只會在下次訪問id 3時丟失數據。
你在你的數據庫副本的文章,如果是,首先解決這個問題。 – urfusion
沒有重複的文章只是可能在同一時間發佈的文章。 –
你爲什麼不按ID來訂購? –