我的页面显示一张图片,我想显示与当前图片相关的上一张和下一张图片。目前我运行相同的查询 3x 并修改 "where"
声明 =, >, <
.
它有效,但我觉得必须有更好的方法来做到这一点。
图像 ID 不是 1、2、3、4、5。可能是 1、2、10、20、21 等。但如果它更有效率,我愿意改变它。
mysql_select_db("database", $conPro);
$currentid = mysql_real_escape_string($_GET['currentid']);
$query ="SELECT * FROM database WHERE id ='".$currentid."' LIMIT 1 ";
$result = mysql_query($query,$conPro) or die(mysql_error());
$affected_rows = mysql_num_rows($result);
if ($affected_rows==1)
{
$row = mysql_fetch_array($result)or die ('error:' . mysql_error());
$current_id = $row['id'];
$current_header = $row['title'];
$current_description =$row['desc'];
$current_image = "http://".$row['img'];
$current_url = "http://".$row['id']."/".$db_title."/";
$current_thumb = "http://".$row['cloud'];
}
mysql_select_db("database", $conPro);
$query ="SELECT * FROM database WHERE id <'".$currentid."' ORDER BY id DESC LIMIT 1 ";
$result = mysql_query($query,$conPro) or die(mysql_error());
$affected_rows = mysql_num_rows($result);
if ($affected_rows==1)
{
$row = mysql_fetch_array($result)or die ('error:' . mysql_error());
$previous_id = $row['id'];
$previous_header = $row['title'];
$previous_description =$row['desc'];
$previous_image = "http://".$row['img'];
$previous_url = "http://".$row['id']."/".$db_title."/";
$previous_thumb = "http://".$row['cloud'];
}else{
$previous_none = "true"; //no rows found
}
mysql_select_db("database", $conPro);
$query ="SELECT * FROM database WHERE id >'".$currentid."' ORDER BY id ASC LIMIT 1 ";
$result = mysql_query($query,$conPro) or die(mysql_error());
$affected_rows = mysql_num_rows($result);
if ($affected_rows==1)
{
$row = mysql_fetch_array($result)or die ('error:' . mysql_error());
$next_id = $row['id'];
$next_header = $row['title'];
$next_description =$row['desc'];
$next_image = "http://".$row['img'];
$next_url = "http://".$row['id']."/".$db_title."/";
$next_thumb = "http://".$row['cloud'];
}else{
$next_none = "true"; //no rows found
}
mysql_close($conPro);
谢谢你的时间
最佳答案
您不必每次都执行 select_db
。一旦您“选择”了一个数据库,它就会保持选中状态,直到您选择其他内容为止。
您无法真正避免执行两个单独的查询来获取下一张/上一张图像,但您可以使用联合查询来伪造它:
(SELECT 'next' AS position, ...
FROM yourtable
WHERE (id > $currentid)
ORDER BY id ASC
LIMIT 1)
UNION
(SELECT 'prev' AS position, ...
FROM yourtable
WHERE (id < $currentid)
ORDER BY id DESC
LIMIT 1)
这将返回两行,其中包含一个名为“position”的伪字段,它可以让您轻松识别哪一行是“下一条”记录,哪一行是“上一条”记录。请注意,括号是必需的,以便“order by”子句适用于各个查询。如果没有,mysql 将从并集序列中的最后一个查询中获取 order by 子句,并将其应用于完整的并集结果。
关于php - 如何优化这个 mysql/php 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860868/