显示相册中的图像

时间:2009-02-26 09:11:04

标签: sql

我有一个网站,用户可以在其中创建相册,然后将图像添加到这些相册中。然后我在页面上有一个部分,显示用户添加的所有图像。你可以在这里看到它: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,只是想到了我提到这是为了避免任何混淆)

我正在寻找想法并帮助实施它们......

5 个答案:

答案 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图像”的警告)