我有一排要在摄影网站主页上展示的照片。摄影师倾向于一次上传几十张照片,这意味着选择最佳上传照片的编辑很可能将同一摄影师的几张照片一个接一个地放入队列中。但我们不希望一位摄影师连续数小时拥有主页。
目前,我们手动对队列进行排序,使其尽可能按排队时间顺序 (FIFO),但同一摄影师的两张照片的距离不会超过五个时隙。我们想自动化这个。
我知道我们可以在 PHP 中进行排序,但是我们可以使用单个 MySQL 查询以正确的顺序检索队列吗?
表结构看起来像这样。我们通过交换两个相邻镜头的 queued_time 来对队列进行排序——这并不理想,但它确实有效:
homepage_queue
--------------
id INT NOT NULL
photo INT NOT NULL
queued_time INT NOT NULL
photos
------
id INT NOT NULL
photographer INT NOT NULL
浏览相关的 SO 问题会弹出此页面,这似乎表明我需要模拟 Oracle 的 LAG 功能: http: //onlamp.com/pub/a/mysql/2007/04/12/emulating-analytic-aka-排名功能与 mysql.html?page=2
尤其是当我考虑到我需要查看最后五行时,这看起来很混乱,以至于我很想尖叫着跑开并用 PHP 来做,但是我错过了更简单的方法吗?
我们通常将队列塞满一周,每张照片一个小时,所以我们在外面谈论可能有 200 条记录。
队列末尾肯定有一些照片无法以符合“五分开”规则的方式进行排序。没关系,因为我们很可能每 24 小时运行一次作业,而且随着上传的源源不断,队列的尾端变得一团糟是可以的。