反向行“;订单“;使用PHP从表MySQL中获取值

反向行“;订单“;使用PHP从表MySQL中获取值,php,mysql,Php,Mysql,我有一个包含行的表,每个行都有一个“order”值。现在,我有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

我有一个包含行的表,每个行都有一个“order”值。现在,我有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实现这一点?

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

然后将其保存到数据库中


如果您的唯一要求是

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

您可以直接否定这些值(正如我在评论中所写的)。这可以通过

update mytable set `Order` = - `Order`
然而,这里有一个SQL脚本,它将把
顺序
列中的值从最小值“交换”到最大值,从最小值“交换”到第二大值,依此类推

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;

数据的顺序是否已经错误,而您只是想将其反转?根据升序或降序,使用“sort()”或“rsort()”函数。如果数据是以某种随机顺序排列的,而您只是想颠倒顺序,但仍然保持原始的随机性,那么您必须执行其他操作。数据的顺序错误,我想将其颠倒并存储在数据库中。它们在sql中按顺序描述的任何原因都不起作用吗?“数据顺序错误,我想将其反转并存储在数据库中“根据SQL定义,SQL表是无序的,所以不必费心修改它。。您应该使用
SELECT*FROM table ORDER BY ORDER DESC
like@JasonK已经提到了只需否定这些值。谢谢,我刚刚否定了这些值,因为这是最简单的选项,但我也感谢其他选项!