“居中”mysql结果

时间:2011-11-11 12:47:00

标签: php mysql sql database

我想在php + mysql中创建一个照片库。

网址viewphoto.php?id = 143显示照片143。 在导航菜单中,我想显示该相册中的前两张照片以及接下来的两张照片。

我想过使用:

$temp_id = $id - 2;
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id >= {$temp_id} LIMIT 5");

但这不起作用,因为来自不同专辑的照片可能会在所查看的照片之前和之后显示ids。

有谁知道我怎么能这样做?

感谢。

2 个答案:

答案 0 :(得分:6)

使用id对图片进行排序是一个坏主意。想象一下你删除一张图片。你的照片链将被打破。为了解决这个问题,你需要更改id列,这是一个更糟糕的想法。

在一个相册中使用单独的索引列进行排序。在图片被删除的情况下,可以轻松地重建该索引。

或者您在表格中定义“上一个”和“下一个”列。然后,这将包含上一张和下一张图片的ID。如果图片被删除,您只需要为上一张和下一张图片更改这些列。

使用这两种方法,您可以使用嵌套的自联接来访问上一张和下两张图片。如果您需要帮助,请对此帖发表评论。

答案 1 :(得分:4)

我自己一直在处理这个问题,我从来没有找到一个优雅的问题解决方案,我最终在两个查询中做到了:

// next
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id > {$id} ORDER BY id ASC LIMIT 2");

// prev
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id <= {$id} ORDER BY id DESC LIMIT 3");

现在获取“prev”中的第一项是当前照片。

此解决方案必须进行修改,并检查“prev”中的第一项实际上是否为请求的id,因为如果系列中存在间隙,则不能确保它是正确的id。