0

我是一名初级 PHP/MySQL 开发人员,需要一些帮助,如何通过后端使用文本字段自定义排序来显示前端菜单项,我想按 1,2,3 之类的数字对页面(菜单标题)进行排序。 ..ETC。在前端。如果我也能从您的回答中理解下拉菜单排序,那就太好了。:D 但无论如何,这是我的后端代码,但它不起作用我认为需要一个我不太了解的数组:

<form name="sort_form" method="post" action="" >
<?php while($row = mysql_fetch_assoc($res)) { ?>
<tr>
    <input type="hidden" value="<?php echo $row['id']; ?>" name="id" />
    <td><input type="text" value="<?php echo $row['sort_by']; ?>" name="sort_by" size="2" maxlength="2"/></td>
    <td><?php echo $row['page_title']; ?></td>
</tr>
    <?php } ?>
<tr>
    <td colspan="2" align="center"><input type="submit" name="submit" value="Sort" /></td>
</tr>
</form>

这是执行操作时的代码。

<?php
if(isset($_POST['submit']) == "Sort") {

    $id = intval($_POST['id']);
    $sort_by = intval($_POST['sort_by']);

    $query_update = "UPDATE `pages` SET `sort_by`='$sort_by' WHERE `id`='$id'";
    $updated = mysql_query($query_update) or die ("Update failed!");

    echo "Updated Successfuly!";

}
?>

希望你能理解!

谢谢

4

1 回答 1

1

要对列表进行排序,您不能只更新 sort_by 字段。

如果你的表有以下数据

id  page_title  sort_by
1   title_1         1
2   title_2         2
3   title_3         3

如果用 sort_by 值 1 更新第 3 行会发生什么?将有两行的 sort_by 值为 1,哪一行先出现?如果您再次使用 sort_by 值 1 更新第 2 行会发生什么... sort_by 字段中可能会出现很多冲突。

但是,有几种方法可以解决这个问题。一种是简单地交换 sort_by 值。因此,当您将第 3 行的 sort_by 值更新为 1 时,您还将检查是否存在任何 1 的 sort_by 值,如果存在,请将它们替换为第 3 行的 sort_by 值。

如果交换不是您要寻找的行为,您可以为 sort_by 字段提供浮点数据类型。在这种情况下,每次您在表中插入或移动某些东西时,它的 sort_by 字段将是它夹在中间的 2 行的平均值。如果您想在第 1 行和第 2 行之间移动第 3 行,您可以将第 3 行的 sort_by 值设置为 1.5。

id  page_title  sort_by
1   title_1         1
2   title_2         2
3   title_3         1.5

然后,如果您想将 2 移回 1 和 3 之间,您可以将 2 的 sort_by 值设置为 1.25

id  page_title  sort_by
1   title_1         1
2   title_2         1.25
3   title_3         1.5

你可以继续这样做很长时间。但是,由于您正在使用文本字段编辑按字段排序,因此这似乎不是您的正确选择。

我的建议是在你的表中有另一列名为“sort_by_updated_at”。每次更新 sort_by 值时,将 sort_by_updated_at 设置为当前时间。这样,您可以对两列进行排序。您对常规的 sort_by 字段进行排序,但如果有任何冲突,请查看 sort_by_updated_at 字段,并且 sort_by_updated_at 值较低的行将排在所有其他行之前。

于 2012-08-11T00:33:31.777 回答