反向行“;订单“;使用PHP从表MySQL中获取值
我有一个包含行的表,每个行都有一个“order”值。现在,我有500行,我需要反转“顺序”值。所以第一个应该是最后一个,依此类推 例如:反向行“;订单“;使用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
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已经提到了只需否定这些值。谢谢,我刚刚否定了这些值,因为这是最简单的选项,但我也感谢其他选项!