Laravel - find offset of record in mysql results

一曲冷凌霜 提交于 2019-12-24 08:48:32

问题


I have a MySQL table of records with several fields.

These records are shown and updated live in the browser. They are displayed in an order choosen by the user, with optional filters also choosen by the user.

Sometimes a change is made to one of the records, and it may affect the order for a given user.

In order to position the message correctly in the list, I need to find where its new offset falls after the change to the record. Basically, I need to get the "id" for the record that now comes before it in the MySQL results, so that I can use Javascript on the client side to reposition the record on the screen.

In raw SQL, I'd do something like this:

SET @rank=0;
SELECT rank 
FROM 
  (SELECT @rank:=@rank+1 AS rank, 
   subQuery.id AS innerQuery, 
   FROM ...{rest of custom query here}... as subQuery)
AS outerQuery WHERE outerQuery.innerQuery={ID TO FIND};

Then I can just subtract 1 from the resulting rank, and find the ID of the question that comes before the record in question.

Is this kind of query possible with Laravel's query builder? Or is there a better strategy than what I've come up with here to accomplish the same task?

EDIT: There are a lot of records. So if possible I'd like to avoid loading all the records into memory to find the offset of the record. They are originally loaded on the screen in an "infinite scroll" type method, since it would be too much to load all of them at once.

来源:https://stackoverflow.com/questions/51297660/laravel-find-offset-of-record-in-mysql-results

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!