根据前一项的ID获取数组中的下一项[关闭]

Posted

技术标签:

【中文标题】根据前一项的ID获取数组中的下一项[关闭]【英文标题】:Getting the next item in an array based on the ID of the previous item [closed] 【发布时间】:2016-11-07 09:19:06 【问题描述】:

一点背景资料

我使用 AngularJS 作为前端框架,并使用 Laravel 作为前端通信的 API。

问题

对于这个应用程序,我有一个“部分”,在视图中有一个下一个/上一个按钮,当单击下一个时,会使用当前部分 ID 作为参数进行 API 调用。由此,我希望根据我使用的端点(单击哪个按钮)来获取数组中的下一个或上一个项目。

我将如何在 php/Laravel 中解决这个问题,是否有可能或者我应该重新考虑我的应用程序/api 的结构?

我现在拥有的

所以目前,我只有一个“Section”集合:

$sections = Section::orderBy('order', 'DESC')->orderBy('id', 'ASC')->get();

【问题讨论】:

【参考方案1】:

使用普通 SQL 可以通过以下方式获取下一项。

SELECT *
FROM TABLE_NAME
WHERE COLUMN_ID =
    (SELECT min(COLUMN_ID)
     FROM TABLE_NAME
     WHERE COLUMN_ID > REPLACE_PREVIOUS_ID_HERE)

在上面的查询中,子查询只是在你的上一个键之后找到下一个 COLUMN_ID 并将其返回给主查询。

【讨论】:

问题在于排序,我不能使用 ID,因为有时“订单”列会覆盖它,例如,用户可以输入 ID 为 1、2、3、4 的 5 个部分, 5. 但是用户随后决定他们希望 Section ID 3 首先出现在前端,所以他们将 order 列设置为 4。我们的新 Section 数组现在将是 3, 1, 2, 4, 5。 @SeriousJelly:您应该在问题中提前提及此类限制。【参考方案2】:

您可以使用Pagination

$sections = Section::orderBy('order', 'DESC')->orderBy('id', 'ASC')->paginate(2);
return response()->json($sections );

然后你会得到类似的东西(我转换成json)


    "total": 17,
    "per_page": 2,
    "current_page": 1,
    "last_page": 9,
    "next_page_url": "URL?page=2",
    "prev_page_url": null,
    "from": 1,
    "to": 2,
    "data": [
        
            "id": 40,
            "order":1
        ,
        
            "id": 41,
            "order":2
        ,
     ]
 

现在使用“next_page_url”或“prev_page_url”形式的url

【讨论】:

这可能有点问题,不敢相信我还没有尝试过这个。马上调查! 如果您需要其他任何东西,请告诉我 好的,我已经实现了这种方法,并且效果很好!谢谢

以上是关于根据前一项的ID获取数组中的下一项[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:获取模型中的下一项

获取循环中的下一项

[ jquery 效果 delay(duration,[queueName]) ] 此方法用于对队列中的下一项的执行设置延迟

获取数组第一项的最快方法是啥? [复制]

从 JavaScript 中的关联数组中获取第一项的最有效方法是啥?

如何使用 Mongoose 获取当前项的下一项和上一项