0

假设我有一个名为“pages”的表,字段:id、name、content、position。当我在我的 cms 中显示所有页面时,我想放置“向下”和“向上”按钮来设置页面位置。我如何进行职位更新?我怎么知道如何重新定位其他页面?

例如:

id  name  content  position
1   Home  bla bla  1
2   Info  bla bla  4

如果我为第二页(信息)单击“向上”,则位置需要更新为 1,并且第一页位置需要大于 1 - 例如 2。

我使用 MySQL 数据库,我需要 PHP 的解决方案。

4

2 回答 2

0

由于您没有发布任何代码,因此我无法给出具体的解决方案,但我可以给您一个通用的解决方案。它会是这样的(未经测试)

减少页面的位置(假设它的名称是 in $pageName,并且表名称是pages),如下所示:

  mysql_query("UPDATE `pages` SET position=position-1 WHERE name=$pageName");

如果您不允许负排名,您可能需要首先检查排名是否 >0。增加现在与当前页面具有相同排名的页面的位置

 mysql_query("UPDATE `pages` SET position=position+1 
        WHERE position = (SELECT position FROM `pages` WHERE name=$pageName) 
        AND NOT name=".$pageName)

这当然假设页面排名没有 UNIQUE 约束。如果有,请执行以下操作:

  1. 选择您要编辑的页面的排名(比如说$thisRank
  2. 选择具有 rank 的页面的 id $thisRank-1,即上面的那个(比如 to $aboveId)到一个未使用的排名。
  3. 将页面的排名设置为$thisRank-1
  4. 将等级设置$aboveId$thisRank
于 2012-09-15T15:52:34.890 回答
0

实现此目的的一种方法是在同一页面上提交。例如 position.php

如果您有 3 条记录,请考虑:

John bla bla(位置 1)
Mary bla bla(位置 2)
George bla bla(位置 3)

一开始你需要这样的链接

    <a href="position.php?position=<?=$position?>&id=<?=$id?>">up</a>

如上所示,$position 是元素的当前位置,id 是表的 id。

当您单击该链接时

    $_GET['position'] and $_GET['id'] 

你有当前记录的位置和id。

因此,您可以执行以下操作

 <?php
         //connect to DB

         if(isset($_GET['position']) && isset($_GET['id'])){
           $line = $_GET['position'];    
          $id = $_GET['id'];
          //if line is not the first one    
         if($line!=1){       

        $query = "select id,position from pages where position<$line order by position   desc limit 0,1";
       $result = mysql_query($query);
       $row = mysql_fetch_array($result);
       $gotoLine = $row['position'];//line to go to
       $idLine = $row['id'];
       //one position up
       $queryUpdate = "update pages set position=$gotoLine where id=$id";
       mysql_query($queryUpdate);
       //one position down
       $queryUpdate2 = "update pages set position=$line where id=$idLine";
       mysql_query($queryUpdate2);

   }     
}

   $queryLinks = "select * from pages order by position";
   $resultLinks = mysql_query($queryLinks);
   while($rowLinks = mysql_fetch_array($resultLinks)){

   $name = $rowLinks['name'];
   $id = $rowLinks['id'];
   $position = $rowLinks['position'];

   echo "$name<a href='position.php?position=$position&id=$id'> up </a><br/>";

}    


?>
于 2012-09-15T16:05:47.587 回答