写真サイトのホームページに掲載する写真が並んでいます。写真家は、一度に数十枚のショットをアップロードする傾向があります。つまり、編集者はアップロードの中から最高のものを選択し、同じ写真家の複数のショットを次々とキューに入れる可能性が非常に高くなります。しかし、1 人のフォトグラファーが何時間もホームページを所有することは望んでいません。
現時点では、キューを手動でソートして、可能な限りキューに入れられた時間順 (FIFO) になるようにしていますが、同じ写真家による 2 つのショットが 5 スロットよりも近くにならないようにしています。これを自動化したいと考えています。
PHP で並べ替えを実行できることはわかっていますが、単一の MySQL クエリで正しい順序でキューを取得できますか?
テーブル構造はこんな感じ。2 つの隣接するショットの 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 関数をエミュレートする必要があることを示唆しているようです。ランキング関数と mysql.html?page=2
特に、最後の 5 行を確認する必要があると考えると、あまりにも乱雑に見えて、悲鳴をあげて逃げ出し、PHP で実行したくなるのですが、もっと簡単な方法はありますか?
私たちは通常、1 週間、1 枚の写真につき 1 時間、キューを詰め込みます。
キューの最後には、「5 つずつ」ルールを満たす方法で並べ替えることができない写真が必ずあります。ジョブは 24 時間ごとに実行される可能性が高く、アップロードの安定したストリームでは、キューの末尾が混乱しても問題ないため、それは問題ではありません。