企业建站公司推荐,东莞人才网求职,北京网站制作最新教程,动漫制作专业专升本需要考高数吗mysql中有一个表叫policy#xff0c;表的字段有id#xff0c;title#xff0c;time#xff0c;spider_name等等#xff0c;spider_name是爬虫名称#xff0c;每个爬虫采集的数据都会有这个标识。请问如何根据spider_name爬虫名称#xff0c;每一个种类获取10条数据…mysql中有一个表叫policy表的字段有idtitletimespider_name等等spider_name是爬虫名称每个爬虫采集的数据都会有这个标识。请问如何根据spider_name爬虫名称每一个种类获取10条数据需要写这个sql语句。
对于 MySQL 5.7 及以下版本您可以使用变量和子查询来模拟相同的功能。下面是一个示例它使用了用户定义的变量来为每个 spider_name 获取前 10 条记录
SET row_number 0;
SET current_spider ; SELECT id, title, time, spider_name
FROM ( SELECT id, title, time, spider_name, row_number : IF(current_spider spider_name, row_number 1, 1) AS row_num, current_spider : spider_name FROM policy ORDER BY spider_name, time DESC
) AS sorted_data
WHERE row_num 10;
这个查询的工作原理是
1、使用用户定义的变量 row_number 和 current_spider 来跟踪当前的行号和爬虫名称。
2、在子查询中我们根据 spider_name 和 time 对数据进行排序并使用 IF 语句和变量来为每个 spider_name 的数据行分配一个行号。
3、外层查询选择行号小于或等于 10 的记录从而得到每个 spider_name 的前 10 条数据。
要在上面的查询中加入一个过滤条件仅选择 spider_name 为 aaa 或 bbb 的记录您可以在子查询的 WHERE 子句中添加这个条件。以下是修改后的查询
SET row_number 0;
SET current_spider ; SELECT id, title, time, spider_name
FROM ( SELECT id, title, time, spider_name, row_number : IF(current_spider spider_name, row_number 1, 1) AS row_num, current_spider : spider_name FROM policy WHERE spider_name IN (aaa, bbb) ORDER BY spider_name, time DESC
) AS sorted_data
WHERE row_num 10;
这个修改确保了只有 spider_name 为 aaa 或 bbb 的记录会被考虑在内并且为每个这样的 spider_name 获取前 10 条数据。这对于限制结果集到特定的爬虫名称非常有用。