perl - 需要有关分层数据分页的建议

标签 perl postgresql pagination hierarchy dbix-class

我的数据库结构非常简单,除了一些自引用和中间关系外,它简化为产品到类别的概念。

我使用 ResultClass::HashRefInflator 检索的最终数据结构经过一些转换后看起来像这样:

my $data = $self->db->resultset('Category')->with_translation($lang)->with_categories->with_products->display_flattened;

[
    [0] {
        parent_name     "Parent Category",
        id              3,
        name            "First Child category",
        parent_id       1,
        position        1,
        products        [
            [0]  {
                name          "Product One",
            },
            ...
        ],
    }
    ...
]

事情进展顺利,直到为了减少初始产品索引页面的大小,我决定实现 infinite scroll那里有特色。所以一般来说,这是一个分页问题。我遇到的困难是,我只能在类别或产品结果集上应用分页,而不能在整个层次结构上应用分页来检索下一个屏幕所需的数据。

例如,如果我希望每个屏幕显示 20 个项目(项目可以是类别或产品)并且我在 Schema::ResultSet::Category 上应用 ->page(1),它将包含 20 个类别,所有产品都在他们而不是第一类有 19 种相关产品等等。

目前我想到的唯一选择是将整个数据结构作为一维数组存储在某种内存存储中,例如 Redis 或 memcached,然后按预期对其进行切片,但我知道这是错误的。

最佳答案

我完全不知道你想要什么,因为听起来你想要 类别计为分页的一部分;对我来说似乎是一个奇怪的选择。如果 您可以避免计算类别,那么更好的选择可能是代替 获取类别的第一页,获取产品的第一页及其 相关类别。这样你就有了一组绑定(bind)数据而不是 您在上面列出的可能发生的爆炸。

您需要对结果集进行一些更改(至少通过添加方法), 但这不应该太难。您可以改为执行以下操作:

my $data = $self->db->resultset('Product')
  ->with_translation($lang)
  ->with_categories
  ->with_products
  ->search(undef, { page => 1 })
  ->display_flattened;

鉴于此,您将获得一个产品页面(我认为是 25 个),然后是他们的 相关类别。

作为旁注,您对类别执行 with_categories 有点奇怪 结果集。我可能会误解,但至少这是一个 令人困惑的事情。

关于perl - 需要有关分层数据分页的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983467/

相关文章:

database - 如何生成部署到不同 PostgreSQL 数据库或从中缺失的 DDL 对象或函数的列表

postgresql - 重命名 Amazon RDS 主用户名

java.awt.print 只打印第一页

python - 在第二列之后查找并替换

arrays - 无法从 perl 哈希中删除键及其关联值

sql - 错误 : functions in index expression must be marked IMMUTABLE in Postgres

javascript - 尽管在 React 中更新状态,方法仍未获得正确的 useState 值

php - 管理页面列排序

linux - Bash + 如果阈值低于最小值则计算警报

perl - 替换字符串中的 URL - Perl