假设我有一个名为“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解决方案。
答案 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约束。如果有,请执行以下操作:
$thisRank
$thisRank-1
的网页的ID,即上面的一个(比如说$aboveId
)到未使用的排名。 $thisRank-1
$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/>";
}
?>