Php 如何对整数进行排序+;字符串值?
我正在使用PHP和MySQL 我有Php 如何对整数进行排序+;字符串值?,php,mysql,sorting,Php,Mysql,Sorting,我正在使用PHP和MySQL 我有$pallet,它的值如下: P01 P02 P12 P20 P05 如何将这些值排序为: P01 P02 P05 P12 P20 它们都是以p开头的吗?如果是这样的话,您可以只排序($PLALLET),或者按您的ASC列进行排序,因为按字母顺序排序就足够了。它们都以p开头吗?如果是这样的话,你可以只排序($PLALLET)或者按你的列在这里ASC进行排序,因为按字母顺序排序就足够了。如果值总是以“p”开头,那么你可以去掉
$pallet
,它的值如下:
P01
P02
P12
P20
P05
如何将这些值排序为:
P01
P02
P05
P12
P20
它们都是以
p
开头的吗?如果是这样的话,您可以只排序($PLALLET)
,或者按您的ASC列进行排序,因为按字母顺序排序就足够了。它们都以p
开头吗?如果是这样的话,你可以只排序($PLALLET)
或者按你的列在这里ASC进行排序,因为按字母顺序排序就足够了。如果值总是以“p”开头,那么你可以去掉“p”,将其余的转换成一个数字,然后按该数字ASC排序。因此:
select yourcolumn
from (
select cast(replace(yourcolumn,'P','') as unsigned) as rank,
yourcolumn from yourtable) t
order by t.rank asc;
编辑
以下是按字母顺序排序的示例:
create table pallet (id int unsigned not null primary key auto_increment,
pallet varchar(5));
insert into pallet (pallet) values ('P01');
insert into pallet (pallet) values ('P02');
insert into pallet (pallet) values ('P12');
insert into pallet (pallet) values ('P20');
insert into pallet (pallet) values ('P05');
insert into pallet (pallet) values ('P145');
select *
from pallet
order by pallet asc;
结果:
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P145
6 P20
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P20
6 P145
不完全是我们想要的
select pallet
from (
select cast(replace(pallet,'P','') as unsigned) as rank,
pallet from pallet) t
order by t.rank asc;
结果:
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P145
6 P20
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P20
6 P145
如果值总是以“p”开头,那么您可以去掉“p”,将其余的转换成一个数字,然后按该数字ASC排序。因此:
select yourcolumn
from (
select cast(replace(yourcolumn,'P','') as unsigned) as rank,
yourcolumn from yourtable) t
order by t.rank asc;
编辑
以下是按字母顺序排序的示例:
create table pallet (id int unsigned not null primary key auto_increment,
pallet varchar(5));
insert into pallet (pallet) values ('P01');
insert into pallet (pallet) values ('P02');
insert into pallet (pallet) values ('P12');
insert into pallet (pallet) values ('P20');
insert into pallet (pallet) values ('P05');
insert into pallet (pallet) values ('P145');
select *
from pallet
order by pallet asc;
结果:
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P145
6 P20
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P20
6 P145
不完全是我们想要的
select pallet
from (
select cast(replace(pallet,'P','') as unsigned) as rank,
pallet from pallet) t
order by t.rank asc;
结果:
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P145
6 P20
id pallet
-- ------
1 P01
2 P02
3 P05
4 P12
5 P20
6 P145
仔细的只有当“P”后面的数字保持小于100时,此操作才有效。如果包含值“P145”,则按您的列在此处进行简单的排序ASC将不起作用。一定要记住@TomMac如果'P'后面的数字大于100,为什么这不起作用?@xdazz它不起作用,因为MySQL将按字母顺序排序,而不是按数字顺序排序'P'后面的值。因此,如果你将“P145”添加到组合中,并按字母顺序排序,你将得到:P01、P02、P05、P12、P145、P20,而不是P01、P02、P05、P12、P20、P145,我假设数字不会超过99,因为它们是两位数字的零填充。小心。只有当“P”后面的数字保持小于100时,此操作才有效。如果包含值“P145”,则按您的列在此处进行简单的排序ASC将不起作用。一定要记住@TomMac如果'P'后面的数字大于100,为什么这不起作用?@xdazz它不起作用,因为MySQL将按字母顺序排序,而不是按数字顺序排序'P'后面的值。因此,如果将“P145”添加到组合中,并按字母顺序排序,结果将是:P01、P02、P05、P12、P145、P20,而不是P01、P02、P05、P12、P20、P145,我假设这些数字不会超过99,因为它们是两位数字的零填充。