使用MySQL和PHP重新排序列

时间:2011-03-24 12:50:07

标签: php mysql

我在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。

4 个答案:

答案 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;