如何在有限的,任意排序的记录集中找到单个记录的*位置*?

Tim*_*ock 5 mysql sql

MySQL的

假设您想要通过某个id检索单个记录,但是如果您在大型有序集中遇到它,您想知道它的位置是什么.

例如,一个照片库.你落在一张照片上,但系统必须知道它在整个画廊中的偏移量.

我想我可以使用自定义索引字段来跟踪位置,但是在SQL中必须有更优雅的方式.

Mat*_*ish 2

因此,首先创建一个虚拟表,其位置 # 按您的 ORDER BY 排序,然后从该集中选择最高的一个。这是更大结果集中的位置。如果您不按唯一值/值集进行排序,您可能会遇到问题......

如果您在 (photo_gallery_id, date_created_on) 上创建索引,它可能会执行索引扫描(取决于照片的分布),这应该比表扫描更快(假设您的 gallery_id 不是 90% 的照片或其他) 。

SELECT @row := 0; 
SELECT MAX( position ) 
  FROM ( SELECT @row := @row + 1 AS position
           FROM photos
          WHERE photo_gallery_id = 43
            AND date_created_on <= 'the-date-time-your-photo-was' 
          ORDER BY date_created_on ) positions;
Run Code Online (Sandbox Code Playgroud)