| id | url | title | menu_id |
------+--------+--------+----------
| 1 | http://| link 1 | 1 |
| 2 | http://| link 2 | 2 |
| 3 | http://| link 3 | 3 |
| 4 | http://| link 4 | 4 |
嗨,我想知道是否有可能使用PHP将上述内容重新排序为下面的内容。我正在尝试生成一个菜单,可以通过单击向上或向下箭头轻松地重新排序。我不知道从哪里开始。任何帮助将非常感激。
| id | url | title | menu_id |
------+--------+--------+----------
| 1 | http://| link 1 | 2 |
| 2 | http://| link 2 | 4 |
| 3 | http://| link 3 | 3 |
| 4 | http://| link 4 | 1 |
答案 0 :(得分:4)
我使用以下代码
$menu_id = $_GET['page_id'];
$page_order = $_GET['page_order'];
if ($_GET['do'] == 'up') {
mysql_query("UPDATE menu SET menu_order = '$page_order' +1 WHERE id != '$menu_id' AND menu_order < '$page_order'");
mysql_query("UPDATE menu SET menu_order = menu_order -1 WHERE id = '$menu_id'");
} else if ($_GET['do'] == 'down') {
mysql_query("UPDATE menu SET menu_order = '$page_order' -1 WHERE id != '$menu_id'");
mysql_query("UPDATE menu SET menu_order = menu_order +1 WHERE id = '$menu_id'");
}
答案 1 :(得分:2)
这绝对是可能的,但你必须做一些额外的逻辑,这不是可以在一个查询中完成的事情。
考虑单击向上/向下箭头时的步骤。例如,假设您从订单1,2,3,4开始,然后单击#3上的向上箭头。必须要做两件事才能将顺序更改为1,3,2,4:
因此,您必须更改他们点击的项目的位置,以及之前处于新位置的项目。单击向下箭头几乎相同,但增加/减少反转。
答案 2 :(得分:1)
我遇到了同样的问题,并使用if语句查询解决了这个问题。这是一步一步的说明: 1。 在更新mysql之前获取项目的位置。
$query = "SELECT * FROM table WHERE id=1;
$result = mysql_query($query);
$item = mysql_fetch_array($result);
$old_position = $item["position"];
我们在页面中有一个表单,因此我们从$ _POST数据中获取新位置。
$new_position = $_POST["position"];
we determine if we moved the item up or down
if ($new_position > $old_position) { //moved it down
$query = "UPDATE table SET position = position-1 WHERE position >= {$old_pozisyon} AND position <= {$new_pozisyon} and id <> {$id}";
}
我们对其他条件做同样的事情,但这次我们做位置+ 1。希望这有帮助
答案 3 :(得分:0)
@DaveE的想法正确,但是导致其他行的所有排序数据都更高或更低(取决于方向)。这是我的PHP / MySQL:
if ($direction == 'up') {
$q1 = "UPDATE table SET sort = ($sort +1) WHERE id != $pgid AND sort = ($sort -1);";
if($r = mysqli_query($q1, $dbsvr)) {
$q2 = "UPDATE table SET sort = (sort -1) WHERE id = $pgid;";
$r = mysqli_query($q2, $dbsvr);
}
} else if ($direction == 'down') {
$q3 = "UPDATE table SET sort = ($sort -1) WHERE id != $pgid AND sort = ($sort +1);";
if($r = mysqli_query($q3, $dbsvr)) {
$q4 = "UPDATE table SET sort = (sort +1) WHERE id = $pgid;";
$r = mysqli_query($q4, $dbsvr);
}
} else {
echo 'no direction';
}
答案 4 :(得分:-1)
理想情况下,您应该使用SQL查询解决此问题,而不是使用PHP对行进行排序。但是如果由于某种原因需要在PHP中进行排序,请使用array_multisort()
首先应创建一个数组,其中数组的每个项都是查询中的mysql行。然后使用array_multisort()PHP函数按要排序的字段对行进行排序。有关实现详细信息,请参阅此页面上的示例3: http://php.net/manual/en/function.array-multisort.php