在数据库中向上和向下移动行
问题描述:
我开发了一个排名系统,用于在我的网站上为每个项目分配一个排名,以便沿着选项移动排名(向下&)。它工作正常。在数据库中向上和向下移动行
但问题是如果一条记录被删除,它旁边的记录将不会再次排名。 但其他人工作正常。
例子。
id | cat name | Rank
1 | Jackets | 1
2 | T-shirts | 2
3 | Gloves | 3*
4 | Scarf | 4
如果我删除的第三行(这是手套)上面的行(夹克& T恤做工精细) 同样向下的话。 但围巾的排名功能将停止...
任何一个都可以提供简单的解决方案来解决这个问题。
这里是代码........
//============================ UP ================================//
if(isset($_REQUEST["up"])) {
$a=$_REQUEST["up"];
//echo $a; die();
if($a>1){
$b=$a - 1 ;
$id=$_REQUEST["id"];
//echo $id; die();
$sql =mysql_query("SELECT * FROM scat WHERE rank ='".$b."'");
while ($rc= mysql_fetch_array($sql)){
$c=$rc["sid"];
$count=mysql_num_rows($sql);
if($count == 1){
// update item with already placed id
$d=mysql_query("update scat set rank='".$a."' where sid='".$c."'");
// Update up Item
$qry=mysql_query("update scat set rank='".$b."' where sid='".$id."' ");
//header('location:main.php'); break;
}
}
}
}
//============================ Down ================================//
if(isset($_REQUEST["dwn"])) {
$a=$_REQUEST["dwn"];
//echo $a;
if($a>0) {
$b=$a + 1 ;
$id=$_REQUEST["id"];
//echo $id;die();
$sql =mysql_query("SELECT * FROM scat WHERE rank='".$b."'");
while ($rc= mysql_fetch_array($sql)){
$c=$rc["sid"];
$count=mysql_num_rows($sql);
if($count == 1){
// update item with already placed id
$d=mysql_query("update scat set rank='".$b."' where sid='".$id."'");
// Update up Item
$qry=mysql_query("update scat set rank='".$a."' where sid='".$c."' ");
//header('location:main.php'); break;
}
}
}
}
表放在这里....
<table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#007ba4">
<tr>
<td width="50" align="center" valign="top" bgcolor="#FFF" class="ver_nav">Id</td>
<td width="350" align="center" valign="top" bgcolor="#FFF" class="ver_nav">Sub Cataagery name</td>
<td colspan="2" align="center" valign="top" bgcolor="#FFF" class="ver_nav">Rank</td>
<td width="75" align="center" valign="top" bgcolor="#FFF" class="ver_nav">Feature</td>
<td width="75" align="center" valign="top" bgcolor="#FFF" class="ver_nav">Edit</td>
<td width="75" align="center" valign="top" bgcolor="#FFF" class="ver_nav">Del</td>
</tr>
<?php $qry=mysql_query("SELECT * FROM scat WHERE fid='".$_REQUEST[ "fid"]. "' order by rank "); while ($rc=mysql_fetch_array($qry)){ ?>
<tr>
<td width="50" align="center" valign="top" bgcolor="#FFF" class="cat">
<?php echo $rc[ "rank"];?>
</td>
<td width="350" align="center" valign="top" bgcolor="#FFF"><a href="add_pimg.php?fid=<?php echo $rc[" fid "];?>&sid=<?php echo $rc["sid "];?>" class="cat"><?php echo $rc["scat"];?></a></td>
<td width="75" align="center" valign="top" bgcolor="#FFF"> <a href="add_second_cat.php?fid=<?php echo $rc[" fid "];?>&up=<?php echo $rc["rank "];?>&id=<?php echo $rc["sid "];?>" class="cat">Up</a></td>
<td width="75" align="center" valign="top" bgcolor="#FFF"> <a href="add_second_cat.php?fid=<?php echo $rc[" fid "];?>&dwn=<?php echo $rc["rank "];?>&id=<?php echo $rc["sid "];?>"class="cat">Down</a></td>
<td width="75" align="center" valign="top" bgcolor="#FFF"> <a href="add_second_cat.php?fid=<?php echo $rc[" fid "];?>&feature=<?php echo $rc["rank "];?>&id=<?php echo $rc["sid "];?>" class="cat"><?php echo $rc["feature"];?></a></td>
<td width="75" align="center" valign="top" bgcolor="#FFF"><a href="edit_scat.php?fid=<?php echo $rc[" fid "];?>&sid=<?php echo $rc["sid "];?>" class="cat">Edit</a><a href="dell_scat.php?fid=<?php echo $rc[" fid "];?>&sid=<?php echo $rc["sid "];?>" class="cat"></a></td>
<td width="75" align="center" valign="top" bgcolor="#FFF"><a href="dell_scat.php?fid=<?php echo $rc[" fid "];?>&sid=<?php echo $rc["sid "];?>" class="cat">Dell</a></td>
</tr>
<?php }?>
</table>
答
你需要选择一个ID与交换,不算它
这是我的一个可怕的老项目的代码。看起来很滑稽现在
if (isset($_POST['move'])) {
$id=intval($_POST['move']);
$place=db("SELECT place FROM $table WHERE id=$id");
if (!$id OR !$place) die("id or place is not set");
if (isset($_POST['up'])) {
$sort=db("SELECT sort FROM $table WHERE id=$id");
$sort2=db("SELECT max(sort) as msort FROM $table WHERE del=0 AND place=$place AND sort < $sort");
if ($sort2) $id2=db("SELECT id FROM $table WHERE del=0 AND place=$place AND sort = $sort2");
}
if (isset($_POST['down'])) {
$sort=db("SELECT sort FROM $table WHERE id=$id");
$sort2=db("SELECT min(sort) as msort FROM $table WHERE del=0 AND place=$place AND sort > $sort");
if ($sort2) $id2=db("SELECT id FROM $table WHERE del=0 AND place=$place AND sort = $sort2");
}
if ($sort2) {
$q1="UPDATE $table SET sort=$sort2 WHERE id=$id";
$q2="UPDATE $table SET sort=$sort WHERE id=$id2";
mysql_query($q1) or trigger_error(mysql_error());
mysql_query($q2) or trigger_error(mysql_error());
}
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?place=$place");
exit;
}
在
[请不要使用mysql_ *函数(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)新代码。他们不再被维护[并被正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。看到[红色框](http://uk.php.net/manual/en/function.mysql-connect.php)?了解[_prepared statements_](http://en.wikipedia.org/wiki/Prepared_statement),并使用[PDO](http://php.net/pdo)或[MySQLi](http:// php。 net/mysqli) - [这篇文章](http://php.net/manual/en/mysqlinfo.api.choosing.php)将帮助你决定哪个。 – TNK 2013-04-27 16:34:19