Php Mysql提取值按分组并排序

Php Mysql提取值按分组并排序,php,mysql,laravel-5.4,Php,Mysql,Laravel 5.4,这是我的问题,我有一张桌子 page_name | phase_id | type | content Home def | 1 | home |<some content> Home p2 | 2 | home |<some content> Rules def | 1 | rules |<some content> Rules p2 | 2 | rules |<some content> Prize def | 1 | pr

这是我的问题,我有一张桌子

page_name | phase_id | type | content

Home def  | 1 |  home |<some content>
Home p2   | 2 |  home |<some content>
Rules def | 1 |  rules |<some content>
Rules p2  | 2 |  rules |<some content>
Prize def | 1 |  prize |<some content>
Contact   | 1 |  contact |<some content>
我需要查询提取具有阶段id值的唯一行,我必须在查询阶段id中设置以下三种方法

drop table if exists phases;
create table phases(page_name varchar(10),  phase_id int, content varchar(20));

insert into phases values
('Home def'  , 1 , '<some content>'),
('Home p2 '  , 2 , '<other content>'),
('Rules def' , 1 , '<content>'),
('Rules p2 ' , 2 , '<content>'),
('Prize def' , 1 , 'content'),
('Contact'   , 1 , 'content');


select  s.* from
(
select  p.*,
         substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1) UniquePage,
         if(substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1)  <> @p, @rn:=1,@rn:=@rn+1) rn,
         @p:=substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1) prevp
from   (select @rn:=0,@p:='') rn,phases p
order by substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1), p.phase_id desc
) s where s.rn = 1 
;

select s.*
from 
(
select p.*,
            (Select max(p1.phase_id) from phases p1 where substring(p1.page_name,1,instr(concat(p1.page_name,' '),' ') -1) = 
            substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1)) maxpid
from phases p
) s
where s.phase_id = s.maxpid
;


select p.*
from phases p
where p.phase_id = (Select max(p1.phase_id) from phases p1 where substring(p1.page_name,1,instr(concat(p1.page_name,' '),' ') -1) = 
            substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1))
;
这里有三种方法

drop table if exists phases;
create table phases(page_name varchar(10),  phase_id int, content varchar(20));

insert into phases values
('Home def'  , 1 , '<some content>'),
('Home p2 '  , 2 , '<other content>'),
('Rules def' , 1 , '<content>'),
('Rules p2 ' , 2 , '<content>'),
('Prize def' , 1 , 'content'),
('Contact'   , 1 , 'content');


select  s.* from
(
select  p.*,
         substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1) UniquePage,
         if(substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1)  <> @p, @rn:=1,@rn:=@rn+1) rn,
         @p:=substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1) prevp
from   (select @rn:=0,@p:='') rn,phases p
order by substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1), p.phase_id desc
) s where s.rn = 1 
;

select s.*
from 
(
select p.*,
            (Select max(p1.phase_id) from phases p1 where substring(p1.page_name,1,instr(concat(p1.page_name,' '),' ') -1) = 
            substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1)) maxpid
from phases p
) s
where s.phase_id = s.maxpid
;


select p.*
from phases p
where p.phase_id = (Select max(p1.phase_id) from phases p1 where substring(p1.page_name,1,instr(concat(p1.page_name,' '),' ') -1) = 
            substring(p.page_name,1,instr(concat(p.page_name,' '),' ') -1))
;

您希望阶段id按升序排列,如10,9,8…1按什么排列?页面名称?在您的示例中,所有页面名称的顺序都非常重要,但我只需要一行用于阶段_id@DanIonescu是阶段id;请看,您希望阶段id按升序排列,如10,9,8…1按什么排列?页面名称?在您的示例中,所有页面名称的顺序都非常重要,但我只需要一行用于阶段_id@DanIonescu是阶段id;请参阅hi-Salmon thx我很抱歉我更新了我的表格,用于组行的插入页面类型thx,非常感谢您的回复,您能建议对此列进行改进吗?hi-Salmon thx我很抱歉我更新了我的表格,用于组行的插入页面类型thx,非常感谢您的回复,您能建议对此列进行改进吗?