Mysql
對錶進行排序,以便連結的行在整體 alpha 排序中顯示為子集
我有這張成員表,其中成員資格是單身或家庭,如果是家庭,他們可以是家庭負責人或受撫養人。輸出成員視圖時,它目前按 alpha 升序排序,但我想找到一種方法將一個家庭負責人的所有家屬放在頭下。
相關欄目是:
isFam ( tinyint(1) ) isFamHead ( tinyint(1) ) memKey ( int(11) )
是否有某種方法,在 mysql 查詢中,按字母順序對單個成員和戶主的表進行排序,但將戶主的家屬直接放在戶主的下方?
(如果所有家庭成員都有相同的姓氏,這種方法現在有效,但在很多情況下我發現他們沒有。而且不同的家庭也可以有相同的姓氏,所以……)
從評論:
memKey
標識一個成員。對於單個會員資格,只有一行具有該memKey
; 對於家庭成員資格,給定家庭的所有成員都將具有相同的memKey
.- 對於單個成員,
isFam
為 0;對於所有家庭成員,isFam
= 1。- 每個家庭成員的“戶主”有
isFamHead
= 1;應該只有一行 whereisFamHead
= 1 permemKey
。(忽略isFamHead
單個成員的值)
所以 - 做出以下假設:
memKey
對於一家之主和該家族的所有附屬成員來說都是一樣的;- 在子成員行中沒有指向族主記錄的直接指針。
isFamHead
用作布爾值,其中“1”表示該行代表一家之主,“0”表示不代表該行。memKey
任何給定的whereisFamHead
= 1只有一行來自評論:“單身”會員(1 人,無家庭)的
isFam
成員 = 0。屬於家庭成員的成員isFam
= 1;只有家庭中的主要成員isFamHead
= 1,其餘的將是 0。像這樣的東西應該工作。當然,列名和表名是由組成的,因為除了三個相關的列之外沒有提供任何內容。
SELECT CASE WHEN `isFamHead` = 1 OR `isFam` = 0 THEN CONCAT(lastname,', ',firstname) ELSE '' END as FamilyHead ,CASE WHEN `isFamHead` = 0 AND `isFam` = 1 THEN '' ELSE CONCAT(lastname,', ',firstname) END as FamilyMember ,'blah blah' as Additional_Columns FROM ( SELECT fh.lastname as fh_lastname ,fh.firstname as fh_firstname ,m.* FROM member m INNER JOIN member fh ON (m.memKey = fh.memKey AND fh.isFamHead = 1) ) sq ORDER BY fh_lastname, fh_firstname, memKey, isFamHead DESC, lastname, firstname;
isFamHead
我們的子查詢將目前行的行的名字和姓氏添加memKey
到目前行的數據中。然後,我們按以下方式排序: - 戶主的姓氏和名字 -
memKey
(以防有兩個戶主同名 - 這將每個實際的家庭組拉到一起) -isFamHead
按降序排列 - 這使得戶主排在第一行每個家庭組 - 最後是成員的姓氏和名字。如果我們有以下家庭:
- 約翰·史密斯(負責人)、簡·利維、保羅·史密斯-利維、弗蘭克·史密斯(
memKey
= 10000)- 約翰史密斯(負責人)、帕蒂史密斯、傑克史密斯、阿爾文 C 蒙克(
memKey
= 10001)- 阿德里安·蒙克(負責人)、特魯迪·蒙克、安布羅斯·蒙克
- 史蒂夫·羅傑斯(單人)
這應該給我們以下輸出:
Family Head Family Member ------------------ ------------------- Monk, Adrian Monk, Ambrose Monk, Trudy Rogers, Steve Smith, John Levy, Jane Smith, Frank Smith-Levy, Paul Smith, John Monk, Alvin C Smith, Jack Smith, Patty
注意:程式碼未經測試。
您應該考慮這個或另一個相關表中的一些組 ID。將具有相同組 ID 的帳戶標記為您可以將其中的 1 個或多個作為增強帳戶類型。
有道理?