gpt4 book ai didi

php - 创建用于根据时间获取动态数据的 API 端点

转载 作者:可可西里 更新时间:2023-11-01 07:36:28 25 4
gpt4 key购买 nike

我有一个抓取器,它定期从新闻站点抓取文章并将它们存储在数据库 [MYSQL] 中。抓取的工作方式是先抓取最旧的文章,然后再抓取更新的文章。

例如一篇写于1 月 的文章将首先被抓取并赋予一个ID 1,而另一篇文章是在 1 月 2 日 抓取的数据将具有 ID 2

因此,与旧文章相比,最近的文章将具有更高的 ID。

有多个爬虫同时运行。

现在我需要一个端点,我可以根据文章的时间戳查询该端点,而且每次提取时我也有 10 篇文章的限制。

例如,当有 20 篇文章 的时间戳为 1499241705 时,当我查询时间戳为 1499241705< 的端点时,就会出现问题/strong> 检查是否给我所有 >=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 子句发送。

例如 $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。因此数据将丢失。

最佳答案

两部分:时间戳和id。

WHERE   timestamp <= $ts_leftoff
AND ( timestamp < $ts_leftoff
OR id <= $id_leftoff )
ORDER BY (timestamp DESC, id DESC)

因此,假设 id 是唯一的,即使很多行具有相同的 timestamp 也没关系,顺序是完全确定的。

有一个语法,但不幸的是它没有得到很好的优化:

WHERE (timestamp, id) <= ($ts_leftoff, $id_leftoff)

所以,我建议不要使用它。

更多关于“离开”的概念:http://mysql.rjweb.org/doc.php/pagination

关于php - 创建用于根据时间获取动态数据的 API 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com