繁体   English   中英

使用 PHP 从 MySQL 表中反转行“顺序”值

[英]Reverse row "order" value from table MySQL with PHP

我有一个带有行的表,每个表都有一个“订单”值。 现在,我有 500 行,我需要反转“顺序”值。 所以第一个应该是最后一个,依此类推。

例如:

Name   |  Order
-------------------
Row 1  |    1
Row 2  |    4
Row 3  |    5
Row 4  |    8
Row 5  |    12
Row 6  |    20

现在应该是:

Name   |  Order
-------------------
Row 1  |    20
Row 2  |    12
Row 3  |    8
Row 4  |    5
Row 5  |    4
Row 6  |    1

我只需要这样做一次,所以性能并不重要。 我怎样才能使用 PHP 做到这一点?

如果您的唯一要求是

所以第一个应该是最后一个,依此类推

您可以否定这些值(正如我在评论中所写)。 这可以用

update mytable set `Order` = - `Order`

但是 - 这是一个 SQL 脚本,它将“交换” Order列中的值,从最小到最大,从第二小到第二大,依此类推。

create table tmp_asc(
  i int auto_increment primary key,
  o int,
  index (o)
);

insert into tmp_asc(o)
  select `Order` from mytable order by `Order` asc;

create table tmp_desc(
  i int auto_increment primary key,
  o int,
  index (o)
);

insert into tmp_desc(o)
  select `Order` from mytable order by `Order` desc;

update mytable t
join tmp_asc on tmp_asc.o = t.Order
join tmp_desc on tmp_desc.i = tmp_asc.i
set t.Order = tmp_desc.o;

drop table tmp_asc, tmp_desc;

演示

带有窗口函数的 MySQL 8 使它变得更简单:

with cte as (
  select `Order`
  , row_number() over (order by `Order` asc)  as rn_asc
  , row_number() over (order by `Order` desc) as rn_desc
  from mytable
)
update mytable t
join cte a on a.Order = t.Order
join cte d on d.rn_desc = a.rn_asc
set t.Order = d.Order;

演示

使用 PHP 的“rsort()”函数。 它将数组从最大值到最小值排序。

然后将其保存到您的数据库中。

http://php.net/manual/en/function.rsort.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM