gpt4 book ai didi

SQL 以 "round-robin"顺序返回行

转载 作者:行者123 更新时间:2023-11-29 11:19:27 25 4
gpt4 key购买 nike

我有一堆 URL 存储在一个表中,等待脚本抓取。但是,其中许多 URL 都来自同一站点。我想以“站点友好”的顺序返回这些 URL(即,尽量避免连续使用来自同一站点的两个 URL),这样我就不会在短时间内发出过多的 http 请求而被意外阻止.

数据库布局是这样的:

create table urls (    site varchar,       -- holds e.g. www.example.com or stockoverflow.com    url varchar unique);

示例结果:

SELECT url FROM urls ORDER BY mysterious_round_robin_function(site);http://www.example.com/some/filehttp://stackoverflow.com/questions/askhttp://use.perl.org/http://www.example.com/some/other/filehttp://stackoverflow.com/tags

我想到了类似“ORDER BY site <> @last_site DESC”的东西,但我不知道如何着手编写这样的东西。

最佳答案

有关其工作原理的更详细说明,请参阅我博客中的这篇文章:

使用新的 PostgreSQL 8.4:

SELECT  *
FROM (
SELECT site, url, ROW_NUMBER() OVER (PARTITION BY site ORDER BY url) AS rn
FROM urls
)
ORDER BY
rn, site

旧版本:

SELECT  site,
(
SELECT url
FROM urls ui
WHERE ui.site = sites.site
ORDER BY
url
OFFSET total
LIMIT 1
) AS url
FROM (
SELECT site, generate_series(0, cnt - 1) AS total
FROM (
SELECT site, COUNT(*) AS cnt
FROM urls
GROUP BY
site
) s
) sites
ORDER BY
total, site

,尽管它可能效率较低。

关于SQL 以 "round-robin"顺序返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1160688/

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