使用PHP将记录定位在数据库表中

时间:2012-09-15 15:24:22

标签: php mysql position records

假设我有一个名为“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解决方案。

2 个答案:

答案 0 :(得分:0)

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

减少页面的位置(假设它的名称在$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. 选择排名为$thisRank-1的网页的ID,即上面的一个(比如说$aboveId)到未使用的排名。
  3. 将您的网页排名设为$thisRank-1
  4. $aboveId的排名设为$thisRank

答案 1 :(得分: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/>";

}    


?>