繁体   English   中英

如何对 sql 中的一对多关系表进行分页?

[英]How to pagination with one-to-many relationship tables in sql?

基本上我想写一个 API,客户会说“我想要 5 本书,我需要知道你有多少本书”并且 api 应该返回前 5 本书和总书数。

我有 Book Table,每本书都可以翻译一种以上的语言,所以我把它放在单独的表中。

这是我的书桌

在此处输入图像描述

这是BookLanguages 表

在此处输入图像描述

客户端调用: api/books?index=0&take=5预期结果:

{
  Books:
  [
    {
        "Name": "Harry Potter and the Philosopher's Stone",
        "Languages": "en,de,ch"
    },
    {
        "Name": "Harry Potter and the Order of the Phoenix",
        "Languages": "en,ch"
    },
    {
        "Name": "Harry Potter and the Half-Blood Prince",
        "Languages": "en,ch"
    },
    {
        "Name": "The Hobbit",
        "Languages": "ch,de"
    },
    {
        "Name": "The Fellowship Of The Ring",
        "Languages": "ch,en"
    }
  ],
  TotalCount:8
}

我的结果:

{
  Books:
  [
    {
        "Name": "Harry Potter and the Philosopher's Stone",
        "Languages": "en,de,ch"
    },
    {
        "Name": "Harry Potter and the Order of the Phoenix",
        "Languages": "en,ch"
    }
  ],
  TotalCount:8
}

我的 sql 代码如下所示:

SELECT * FROM Books B
LEFT JOIN BookLanguages L ON L.BookId = B.Id

连接表如下所示:

在此处输入图像描述

而且我用OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY取 5 行。 所以它只给出了2本不同的书。 但如你所知,我需要 5 种不同语言的不同书籍。

预期加入表(它以某种方式获得前 5 本书,这是我的问题) 在此处输入图像描述

约束: API 还具有语言和颜色过滤选项。 所以我不能先拿 5 本书然后加入 BookLanguages 表。 (API 可以是api/books?index=0&take=5&language=ch

注意:当然书籍不是我真正的问题,我只是想让问题变得简单。 我必须进行多个联接(具有一对多关系)

我正在使用 mssql

问题明确后的解决方案

    SELECT b.id,
        b.name,
        b.color,
        bl.language
    FROM books b
        JOIN booklanguages bl ON
            bl.bookid = b.id
    WHERE b.id >= (SELECT TOP 1 id FROM books ORDER BY id OFFSET 15) AND
       b.id <= (SELECT TOP 1 id FROM books ORDER BY id OFFSET 19)
    ORDER BY b.id, bl.language

只需将 15 和 19 更改为所需的值即可更改为分页选择的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM