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,保持相同的组结构。
答案 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
;