如何在MySQL查询中最好地获取3个先前图像和3个后续图像记录?

如何在MySQL查询中最好地获取3个先前图像和3个后续图像记录?,mysql,Mysql,我将从功能的角度简要解释我想要完成的任务。我正在制作一个图像库。在显示单个图像的页面上,我希望侧边栏显示同一用户上传的图像的缩略图。最多应该有6个,3个在当前主映像之前发布,3个在主映像之后发布。您可以将其视为同一用户的图像流,您可以在其中导航。我相信Flickr也有类似的事情 从技术上讲,“我的图像”表有一个自动递增的id、一个用户id和一个日期字段,以及许多其他列 关于如何实现这样的查询,您有什么建议?我可以在一个查询中合并这个吗?是否有任何方便的MySQL实用程序可以处理偏移量之类的问题

我将从功能的角度简要解释我想要完成的任务。我正在制作一个图像库。在显示单个图像的页面上,我希望侧边栏显示同一用户上传的图像的缩略图。最多应该有6个,3个在当前主映像之前发布,3个在主映像之后发布。您可以将其视为同一用户的图像流,您可以在其中导航。我相信Flickr也有类似的事情

从技术上讲,“我的图像”表有一个自动递增的id、一个用户id和一个日期字段,以及许多其他列

关于如何实现这样的查询,您有什么建议?我可以在一个查询中合并这个吗?是否有任何方便的MySQL实用程序可以处理偏移量之类的问题

PS:我不喜欢创建额外的排名列,因为这会使删除管理变得困难。另外,使用自动增量id似乎有风险,稍后我可能会将其更改为GUID。最后,我当然要寻找一个执行和扩展的查询


我知道我要求很多,但似乎比实际情况更简单?

查询可能如下所示。 有了UserID+image\u id索引和可能用于覆盖目的的附加字段,这应该表现得比较好

SELECT field1, field2, whatever
FROM myTable
WHERE UserID = some_id
  -- AND image_id > id_of_the_previously_first_image
ORDER BY image_id
LIMIT 7;

帮助缩放,应考虑使用较大的限制值和相应的缓存。

编辑回答备注/问题: 综合指数。。。 是由几个字段组成的,特别是

请注意,此查询的可选元素位于括号[]中。我认为唯一约束是件好事。附加覆盖字段字段1,。。。可能是受益者,但这取决于此类附加字段的宽度以及总体设置和使用模式,因为[大型]索引会减慢插入/更新/删除,因此可能希望限制此类索引的数量和大小等

这样的索引数据类型既不是数字也不是字符串等。它只是由单个数据类型组成。例如,如果UserId为VARCHAR10,Image_id为INT,则生成的索引将使用这两种类型作为基础搜索条件,即

。。。其中UserId='JohnDoe'和image_id>12389

换句话说,不需要将这些标准组合成一个键

关于图像识别 当你说image_id时,你指的是组合的用户/图像id,对吗? 不,我是说只有图像id。我假设这个字段是表中的一个单独字段。UserID在WHERE子句的另一个谓词中处理。 最初的问题记录表明这个字段是自动生成的,我假设我们可以依赖这个字段进行排序。或者,我们可以依赖其他字段,例如上载图像时的时间戳等


此外,事后考虑,无论是按[单调递增的]图像\u id排序,还是按上载的时间戳\u排序,我们可能希望使用DESC顺序,首先显示最新的内容。

听起来很有趣。为了澄清一下,这个组合索引字段到底是什么样子的?是数字的吗?它是串联字符串吗?我这样问是因为我想知道在没有数字排序的情况下,MySQL如何在这个范围内搜索。第二个问题:在示例查询中,当你说image_id时,你指的是组合的用户/图像id,对吗?@Ferdy,请检查我的编辑回答,我想,这些问题。很抱歉回复晚了,你的编辑和评论解释了一切。非常感谢您迅速而详细的回复。很抱歉,我把投票结果弄糟了,我又试着把它调高一次,但结果却把它调为零。现在它说,投票时间太长,无法增加。只要知道我对你的回答很满意@弗迪,投票没问题,反正我很快就要超过每天200个名额了。我喜欢这种认可,但就其本身而言,我几乎不适合做销售代表。顺便说一句,你的头像很好。谢谢你,这张照片是为我正在进行的一个名为JungleDragon的项目拍摄的。我不会在这里做广告,但我雇佣的一位艺术家为这只蜥蜴画了插图。我的问题也是关于那个项目的。
CREATE [UNIQUE] INDEX UserId_Image_id_idx
  ON myTable (UserId, image_ida [, field1 ...] )