2016-05-07 9 views
0
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; 

データ:MySQLの順グループ

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'すなわちrelation = 1は一番上にあるはずです。これらの2つは真ですが、アルファベット順にrelation = 1の 'name'もソートする必要があります。

つまり、データをhh_idとrelationでグループ化すると、各グループ/データセクション(hh_idで順序付けられている)をアルファベット順にソートする必要があります。

出力例:

は、同じグループの構造を維持しながら、1、2、3又はアルファベットA、J、Rによって順序付けされるべきです。

enter image description here

+1

読者は出力例簡単 –

+0

その理解できるように、あなたの出力は、...挿入されたデータと関連しなければならないレコードがすでにhh_idによって並べ替えられていたときにキーが名前欄でソートされ、関係 – Ayub

答えて

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 
; 
+0

アルファベット順に 'name'をアルファベット順に並べ替える必要があります – Ayub

+0

あなたのクエリはhh_idとrelationを使って並べ替えられますが、この点までは同じですが、アルファベット順にアルファベット順に並べ替えたい場合は、relationが1の場合はこれを明示してください。 – Ayub

+0

質問を確認してください。 – Ayub