基本上我有相册,其中包含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 ....;
假设created_date每个元素album_id(album_id和created_date)对于中的所有行都是唯一的images,则这是:
created_date
album_id
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
GROUP BY
SELECT
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 having count(*) = 4
您选择第4个位置的图片(请注意having count(*) = 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再次注意该条款。)
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子句,因为您已经精确定位了想要的图像。