Php 如何对整数进行排序+;字符串值?

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”开头,那么你可以去掉

我正在使用PHP和MySQL

我有
$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,因为它们是两位数字的零填充。