【问题标题】:API should return only n rows at a timeAPI 一次应该只返回 n 行
【发布时间】:2019-11-21 06:59:19
【问题描述】:

我是 API 构建的新手。我有一个要求。我的 API 显示书籍详细信息,如果符合条件的书籍数量超过 25,API 一次应该只返回 25 本书,并支持检索下一组 25 本书直到检索到所有书籍的方式。

我还需要一点建议。我有 10 个表,我需要通过从每个表中获取一些数据来加入这些表,并将合并的结果返回给 API 调用。我认为一个查询中的 10 个连接会占用大量内存,并且可能不会给出最佳结果。

我还将在各种表格的某些列上设置一些过滤器。我应该为单个表单独获取行吗?同样在 API 返回调用中,某些键将具有多个数据,但此查询未显示以下是我正在使用的查询:

SELECT b.title,a.name,b.media_type,l.code,bsub.name,bs.name,f.url FROM books_book b 
inner join books_book_authors ba on b.id=ba.book_id 
inner join books_author a on a.id=ba.author_id 
inner join books_bookshelves bss on ba.book_id=bss.book_id
inner join books_bookshelf bs on bss.bookshelf=bs.id
inner join books_book_subjects bsubs on bsubs.book_id=ba.book_id
inner join books_subject bsub on bsubs.subject_id=bsub.id
inner join books_format f on f.book_id=ba.book_id
inner join books_languages ls on ls.book_id=ba.book_id
inner join books_language l on ls.language_id=l.id
order by b.download_count desc;

【问题讨论】:

  • 您将数据保存在这么多不同的表中是否有任何具体原因?作者、语言、主题等属性可以保存在 books 表中。
  • @arun : 我只得到了这种格式的 .sql 文件
  • 您是否考虑构建一个物化视图,该视图将在完成所需的连接后保留所有这些信息,并且您可以从 API 查询视图。但是,保留视图会产生额外的开销。

标签: mysql rest api flask


【解决方案1】:

您可以使用limit 和偏移量来检索有限的数据集

SELECT column1, column2, ...
FROM table_name
LIMIT 10 offset 5;

【讨论】:

  • 但我不明白的是问题中的粗体部分。我可以检索 n 行,但我将如何获取剩下的数据。请阅读问题中的粗体部分
  • 那是你使用offset的地方。如果您想在第一页上显示 25 个项目,这意味着您在第二页上有 LIMIT 25 OFFSET 0,您有 LIMIT 25 OFFSET 25,依此类推。看看我最近为朋友制作的这个例子。它正在做这个github.com/bluebrown/restify-example
  • 那么问题的另一部分呢?连接部分
  • 好吧,你不应该同时问两个问题。请为您的其他问题打开一个单独的问题。我已经回答了标题要求的内容。由于这个原因,有些人甚至可能会否决这个问题。
【解决方案2】:

您可以在 SQL 查询中使用 LIMIT 来限制页面大小。您还需要根据 book_id 对结果进行排序。在您的 get API 中,您可以发送您收到的当前页面的最后一本书的 book_id。然后可以使用这个 book_id 从 API 端返回下一页。

【讨论】:

  • 要求按下载顺序取数据。
  • 那么连接部分呢,可以吗?另外,正如我提到的,我没有得到正确的数据。至于某些 book_id 可以有多种语言,但我只得到一种
猜你喜欢
  • 2013-09-12
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多