小编典典

一点点复杂的sql行位置

sql

基本上我有相册,其中包含50张图像init。.现在,如果我显示图像列表,我知道从哪一行显示(显示:50的20到30),意味着从20到30显示10行。问题是,我想选择一个图像,但仍然显示它选择了哪个位置,因此我可以来回移动,但也要保持该位置。

就像如果我选择第5张图像,其ID为’sd564’,我想显示(50张图像中的6张),表示您正在看到50张图像中的6张..如果我得到下一行ID并显示,那么我想展示(50张图片中的7张)。

好吧,我可以轻松地从分页指针完成所有这些操作,例如在url中说(after = 5,after = 6)…它随位置移动,但是如果我没有这个(after
= 6)并且只有一个id,该怎么办?我怎么还能那样做?

我也不想使用(after = 6),因为它的动态站点和图像会添加和删除,因此放置chnages并与其他人共享并返回相同的旧链接,那么它将是错误的位置。

我应该为此运行哪种SQL查询?

目前我有

select * from images where id = 'sd564';

显然,我需要在查询中添加限制或其他内容以获取我想要的内容,或者运行另一个查询以获取结果,同时也要保留此旧查询。无论如何,我只想定位。我希望你能帮助我解决这个问题

示例: http

//media.photobucket.com/image/color%20splash/aly3265/converse.jpg

样本http://img41.imageshack.us/img41/5631/viewing3of8240.png

相册查询请求 (请在下面查看帖子)

select images.* from images, album
where album_id = '5'
and album_id = image_album_id
order by created_date DESC
limit ....;

阅读 223

收藏
2021-04-28

共1个答案

小编典典

假设created_date每个元素album_idalbum_idcreated_date)对于中的所有行都是唯一的images,则这是:

select     i1.*, count(*) as position
from       images i1
inner join images i2
on         i1.album_id      = i2.album_id     -- get all other pics in this album
and        i1.created_date >= i2.created_date -- in case they were created before this pic
where      i1.album_id = 5
group by   i1.created_date

将会可靠地为您获取图像及其位置。请理解,这仅在(album_id,created_date)在整个图像表中是唯一的情况下才能可靠地工作。如果不是这种情况,则该位置将不可靠,并且由于可能您看不到所有照片GROUP BY。还要注意,这样的GROUP BY子句仅列出列表中出现的某些列SELECT(在本例中为images.*)在大多数RDBMS-
es中无效。有关此问题的详细讨论,请参见:http : //dev.mysql.com/tech-
resources/articles/debunking-group-by-myths.html

通过做这个:

select     i1.*, count(*) as position
from       images i1
inner join images i2
on         i1.album_id      = i2.album_id     -- get all other pics in this album
and        i1.created_date >= i2.created_date -- in case they were created before this pic
where      i1.album_id = 5
group by   i1.created_date
having     count(*) = 4

您选择第4个位置的图片(请注意having count(*) = 4

通过做这个:

select     i1.*, count(*) as position
from       images i1
inner join images i2
on         i1.album_id      = i2.album_id     -- get all other pics in this album
and        i1.created_date >= i2.created_date -- in case they were created before this pic
where      i1.album_id = 5
group by   i1.created_date
having     count(*) between 1 and 10

您选择位置1到10的所有照片(having再次注意该条款。)

当然,如果您只想要一个特定的图像,则可以简单地执行以下操作:

select     i1.*, count(*) as position
from       images i1
inner join images i2
on         i1.album_id      = i2.album_id     -- get all other pics in this album
and        i1.created_date >= i2.created_date -- in case they were created before this pic
where      i1.image_id = 's1234' 
group by   i1.created_date

这将正确报告图像在相册中的位置(当然,假设image_id在images表中是唯一的)。在这种情况下,您不需要Have子句,因为您已经精确定位了想要的图像。

2021-04-28