2013-04-27 47 views
2

我開發了一個排名系統,用於在我的網站上爲每個項目分配一個排名,以便沿着選項移動排名(向下&)。它工作正常。在數據庫中向上和向下移動行

但問題是如果一條記錄被刪除,它旁邊的記錄將不會再次排名。 但其他人工作正常。

例子。

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 "];?>&amp;sid=<?php echo $rc["sid "];?>" class="cat">Edit</a><a href="dell_scat.php?fid=<?php echo $rc[" fid "];?>&amp;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 "];?>&amp;sid=<?php echo $rc["sid "];?>" class="cat">Dell</a></td> 
    </tr> 
<?php }?> 
</table> 
+0

[請不要使用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

回答

0

你需要選擇一個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; 
    }