我有一个网站,用户可以在其中创建相册,然后将图像添加到这些相册中。然后我在页面上有一个部分,显示用户添加的所有图像。你可以在这里看到它:http://www.mojvideo.com/slike
问题是我们有一些用户一次上传了很多(20到100之间)的图像,而且他们在前几页有点“垃圾”(特别是因为一些图像几乎相同)。我现在正在努力寻找一种更好的方式来显示这些图像,以便显示来自更多用户的内容。 我的数据库结构如下所示:
foto_albums: id |标题| USER_ID
foto_images: id | foto_albums_id(对图像所在的相册的引用)| user_id |标题
(在foto_images中复制user_id的原因是我有一张未存储在数据库中的“特殊”个人相册,因此如果用户将图像上传到该相册,则foto_albums_id得到的值为0,只是想到了我提到这是为了避免任何混淆)
我正在寻找想法并帮助实施它们......
答案 0 :(得分:1)
为什么不随机拍照?
[警告表现糟糕!] ORDER BY RAND()之类的东西?[/警告]
答案 1 :(得分:1)
可怕的is_private
列:)
我不知道如果没有在架构中添加一些额外的列,就可以有效地执行您正在寻找的内容。您可以为每个图像分配一个随机数,然后按顺序排序(比ORDER BY RAND()
更快,因为它不是每次都计算的)。您可以添加上传时间戳,然后按(例如)seconds * 60 + hours
排序;虽然看起来很奇怪,但它应该可以防止相同上传图像的聚类(假设解析图像需要至少0.5秒,这在给定当前上传速度和图像文件大小的情况下是一个合理的假设)。您可以反转索引列(如,字符串反转)并按顺序排序。
这些都没有从根本上改变这个概念,但为了让它们快速起作用,你需要改变你的架构。
您是否考虑过修改演示文稿?也许是用户最近(最高身份?)图像的样本,然后是必要的“阅读更多信息”。类似的东西:
[img_1/kyle] [img_2/kyle] [img_3/kyle] "See all of Kyle's 50 pix" [img_1/jan] [img_1/soulmerge] [img_2/soulmerge] [img_1/jason] [img_2/jason] [img_3/jason] "See all of Jason's 72 pix"
只是一个想法。
编辑:根据您的评论,如果您想在每个专辑的基础上显示最新内容,那么,它是高度依赖数据库的;我认为一些数据库使这很容易,但MySQL肯定没有。以下是实现此目的的一个示例(在MySQL 5.0 +中):
SELECT
i.id,
i.user_id,
i.title
FROM
foto_images i,
(
SELECT
foto_albums_id,
MAX(id) AS image_id
FROM foto_images
WHERE foto_albums_id <> 0
GROUP BY foto_albums_id
) tmp
WHERE
i.foto_albums_id <> 0
AND i.foto_albums_id = t.foto_albums_id
AND (
SELECT COUNT(*)
FROM foto_image
WHERE
foto_albums_id = i.foto_albums_id
AND id BETWEEN i.id AND t.image_id
) < @NUMBER_OF_PREVIEW_IMAGES_TO_SELECT
ORDER BY i.id;
请注意,在某种程度上取决于您的索引和数据量,此查询的效率非常低。可能考虑仓储信息?在上传终止时定义的额外列display_on_main_page
?
答案 2 :(得分:1)
我认为你需要澄清你的问题是什么,以及你希望实现的目标,因为到目前为止所有的回答都是不可接受的。
你到底想要发生什么?
现在究竟发生了什么?
答案 3 :(得分:0)
只是首页上的问题?您是否可以使用select top(x)
在该页面上仅显示每个用户的最新几张图像,然后在其各自的页面上显示所有用户图像?
答案 4 :(得分:0)
如果您确实要显示按上传时间排序的所有图片,并且您不希望单个用户的图片在单个页面中占用太多空间,则需要限制他们被允许上传的图像。当用户在过去24小时内上传过X图像时,只需禁用上传链接(如果用户试图绕过该规则,也会显示“过去24小时内已经上传过X图像”的警告)