我的页面显示图像,我想显示与当前图像相关的上一张和下一张图像。目前,我运行相同的查询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);
感谢您的时间
答案 0 :(得分:2)
您不必每次都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将从union序列中的最后一个查询中获取order by子句,并将其应用于完整的union结果。
答案 1 :(得分:0)
您可以先获取“上一个”WHERE id <'".$currentid."' ORDER BY id DESC
,然后查询两个“上方”SELECT * FROM database WHERE id >= '".$currentid."' ORDER BY id ASC
,然后只需要两个查询而不是三个。