On Thu, Jul 16, 2009 at 1:20 AM, Elim PDT<e...@pdtnetworks.net> wrote:
> My table group_member looks like this:
> +-----------+-------+---------+
> | member_id | name  | head_id |
> +-----------+-------+---------+
> |         1 | Elim  |    NULL |
> |         2 | Ann   |       1 |
> |         3 | David |    NULL |
> |         4 | John  |       3 |
> |         5 | Jane  |       3 |
> +-----------+-------+---------+
>
> Record with null head_id means
> the member is a group head.
> Record with head_id k are in the
> group with head whoes id equals k.
>
> I like to fetch the rows in the following ordaer
>
> |         3 | David |    NULL |
> |         4 | John  |       3 |
> |         5 | Jane  |       3 |
> |         1 | Elim  |    NULL |
> |         2 | Ann   |       1 |
>
> That is
> (1) A head-row follewed by the group members with that head
> (2)head rows are ordered alphabetically by name.
>
> What the query looks like?
>
> Thanks
>
>

You need to create your own sort values, and link to the "head" name.
So really you are sorting on head name + head_id. Since sometimes the
"head" name is the current record, sometimes it's a "parent" record,
you need to conditional check which type of "record" it is and built
the sort value.

SELECT tablename.*,
IF(tablename.head_id=NULL,
  CONCAT(tablename.name, tablename.member_id),
  CONCAT(heads.name, tablename.head_id)
) AS SortValue
FROM tablename LEFT JOIN tablename AS heads ON tablename.head_id=heads.member_id
ORDER BY SortValue


Brent Baisley

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to