我在MySQL表中有一个列,此列表示我希望每个字段显示的顺序,我希望能够更改行的编号,如果我更改它,它将更改所有元素桌子。
例如:
item_name item_order
item1 1
item2 2
item3 3
item4 4
item5 5
让我们说我希望item5成为第一,而新结果集将如下所示:
item_name item_order
item5 1
item1 2
item2 3
item3 4
item4 5
提前致谢,itai。
答案 0 :(得分:4)
为什么不在选择查询中使用order by
clause?
select *
from your_table
order by item_order
使用order by
子句将允许指定必须对结果进行排序的顺序 - 这里,在我给出的示例中,它们将按升序item_order
排序。
答案 1 :(得分:1)
有很多方法可以实现这样有用的功能 这是一个非常简单的例子,只是为了给你一个想法:
$id = intval($_POST['id']);
if (isset($_POST['up'])) {
$sort=dbgetone("SELECT sort FROM $table WHERE id=$id");
$sort2=dbgetone("SELECT max(sort) FROM $table WHERE sort < $sort");
if ($sort2) $id2=dbgetone("SELECT id FROM $table WHERE sort = $sort2");
} elseif (isset($_POST['down'])) {
$sort=dbgetone("SELECT sort FROM $table WHERE id=$id");
$sort2=dbgetone("SELECT min(sort) FROM $table WHERE sort > $sort");
if ($sort2) $id2=dbgetone("SELECT id FROM $table WHERE sort = $sort2");
}
if ($sort2) {
$q1="UPDATE $table SET sort=$sort2 WHERE id=$id";
$q2="UPDATE $table SET sort=$sort WHERE id=$id2";
dbquery($q1);
dbquery($q2);
}
显示的每一行旁边都有“向上”和“向下”按钮,可以向前或向后移动一个位置
答案 2 :(得分:0)
按顺序使用
select *
from table
order by item_order
答案 3 :(得分:0)
如果你想让号码运行得比你需要更新一样,如下所示。
如果你使列item_order成为小数(10,1)而不是int,你可以很容易地重新编号排名数。
item_name item_order
item1 1
item2 2
item3 3
item4 4
item5 5
update mytable set item_order = 0.5 where item_name = item5
item_name item_order
item1 1
item2 2
item3 3
item4 4
item5 0.5
之后,你可以按照正确的整数顺序重新排序item_order
set @order = 1;
update mytable
set item_order = @order:= @order + 1
order by item_order asc;
修改强>
当然,您可以保留整数并仅使用偶数数字进行排名,并使用奇数在某个地方之间插入更改的排名。 然后,您将使用以下查询来更新...
set @order = 2;
update mytable
set item_order = @order:= @order + 2
order by item_order asc;