MySQL按字母顺序排列记录组

时间:2016-05-07 09:52:00

标签: mysql

CREATE TABLE `hh_members` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  `hh_id` int(11) DEFAULT NULL,
  `relation` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

数据:

insert  into `hh_members`(`id`,`name`,`hh_id`,`relation`) values (1,'Ramzee',1,1),(2,'Trats',1,2),(3,'Alpino',1,2),(4,'Frazier',1,4),(5,'Abraham',2,1),(6,'Woo Wu',2,3),(7,'John',2,3),(8,'Marie',3,3),(9,'Cruze',3,2),(10,'Jinga',3,1),(11,'Abraham',4,1),(12,'Kyla',4,2),(13,'Juanita',4,3);

到目前为止的查询:

SELECT * FROM hh_members
ORDER BY NAME, hh_id, relation

应该是什么输出:

按' hh_id'分组的记录和'关系'即relation = 1应该是最顶层的。虽然这两个是真的,但他们也应该排序' name' of relation = 1按字母顺序排列。

换句话说,当我们按hh_id和relation分组数据时,它应按字母顺序对每个组/数据部分(按hh_id排序)进行排序。

示例输出:

应按1,2,3或按字母顺序排列A,J,R,保持相同的组结构。

enter image description here

1 个答案:

答案 0 :(得分:1)

select left(h.name,h.hh_id) as name1,h.* from hh_members h inner join (
select name,hh_id as hid from hh_members where relation=1) r on r.hid=h.hh_id
order by r.name,h.hh_id,h.relation
;