"Centering" mysql result


"Centering" mysql result

我正在尝试在php + mysql相册。

URL 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");

但这不起作用,因为不同相册中的照片id可以在查看的照片id之前或之后

有人知道我怎么能做到这一点吗?

谢谢。

使用id对图片进行排序是一个坏主意。假设你删除了一张图片。你的照片链将被打破。为了修复它,您需要更改id列,这是一个更糟糕的主意。

使用单独的索引列对一个相册进行排序。在图片被删除的情况下,这个索引可以很容易地重建。

或者在表中定义"previous"answers"next"列。这将包含最后一张和下一张图片的id。如果一张图片被删除了,你只需要为上一张图片和下一张图片改变这些列。

使用这两种方法,例如,您可以使用嵌套的自连接来访问前两张和后两张图片。如果你需要帮助,请评论这篇文章

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

// 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,以防系列中出现空白