Thread

  1. Reporting by family tree

    Ibrahim Shaame <ishaame@gmail.com> — 2023-10-05T10:58:55Z

    I have a table of members of a large family extendending back to eight
    generations. The current members contribute a monthly amount to the family
    fund. Only true descendants are included in the family list, no wives, no
    husbands. There are two tables
    
    1 - Names with the following fields: idno (unique) --family member
    
    parentid -- id number of the parent who connected the child to the family
    
    etc
    
    etc
    
    2 – Contributions with fields: idno
    
    etc
    
    etc
    
    
    Now I want to report Names and contributions par family tree: My ideal is
    to list grandfather, father, children based on the two fields (id,
    parentid).
    
    Any suggestions?
    
    Thanks in advance
    
  2. Re: Reporting by family tree

    swastik Gurung <gurung_swastik@yahoo.com> — 2023-10-05T13:15:07Z

     I suppose you ought to be using, recursive CTE queries
    Documentation can be found at: 7.8. WITH Queries (Common Table Expressions)
    
    | 
    | 
    | 
    |  |  |
    
     |
    
     |
    | 
    |  | 
    7.8. WITH Queries (Common Table Expressions)
    
    7.8. WITH Queries (Common Table Expressions) # 7.8.1. SELECT in WITH 7.8.2. Recursive Queries 7.8.3. Common Tabl...
     |
    
     |
    
     |
    
    
    
    
        On Thursday, 5 October 2023 at 16:44:46 GMT+5:45, Ibrahim Shaame <ishaame@gmail.com> wrote:  
     
       
    I have a table of members of alarge family extendending back to eight generations. The currentmembers contribute a monthly amount to the family fund. Only truedescendants are included in the family list, no wives, no husbands.There are two tables
    
    1- Names with the following fields: idno (unique) --family member
    
     parentid -- id number of the parent who connected the child to the family
    
     etc
    
     etc
    
    2– Contributions with fields: idno
    
    etc
    
    etc
    
    
    
    
    
    NowI want to report Names and contributions par family tree: My ideal isto list grandfather, father, children based on the two fields (id,parentid). 
    
    
    Any suggestions? 
    
    
    Thanks in advance
    
    
    
      
  3. Re: Reporting by family tree

    Ibrahim Shaame <ishaame@gmail.com> — 2023-10-05T14:48:56Z

    Swastik, thank you for the response. I started there, and have been stuck
    for many months now. I managed to get only father-child did not get
    further. Here is the example sql where I get father-child results.
    With this code:
    WITH RECURSIVE ukoo AS (
        SELECT namba,
             jina,
             baba,
             babu,
             nasaba_1,
             daraja
        FROM majina2
        WHERE majina2.nasaba_1 IN (SELECT DISTINCT namba FROM majina2)
    
    UNION ALL
    
        SELECT mtoto.namba,
             mtoto.jina,
             mtoto.baba,
             mtoto.babu,
             mtoto.nasaba_1,
             daraja
        FROM majina2 mtoto
              WHERE mtoto.nasaba_1 NOT IN (SELECT DISTINCT namba FROM majina2)
    
    )
    
    SELECT  g.jina AS jina_la_mtoto,
            g.baba AS baba_wa_mtoto,
            g.babu AS babu_wa_mtoto,
            g.namba,
            mzazi.jina AS jina_la_mzazi,
            mzazi.baba AS jina_la_baba_la_mzazi,
            g.daraja
    FROM ukoo g
    JOIN majina2 mzazi
    ON g.namba = mzazi.namba
    ORDER BY g.namba;
    
    I get:
    
    jina_la_mtoto baba_wa_mtoto babu_wa_mtoto namba jina_la_mzazi
    jina_la_baba_la_mzazi
    daraja
    ---------------+---------------+---------------+--------+---------------+-----------------------+--------
    
    
    
    
    
    Ibrahim Khamis Haji 100001 Ibrahim Khamis 6
    Asia Khamis Haji 100002 Asia Khamis 6
    Zubeir Khamis Haji 100003 Zubeir Khamis 6
    Asha Mwinyi Bakari 100004 Asha Mwinyi 6
    Mariama Mwinyi Bakari 100005 Mariama Mwinyi 6
    Zainab Ibrahim Khamis 100006 Zainab Ibrahim 7
    Fatma Ibrahim Khamis 100007 Fatma Ibrahim 7
    
    
    
    
    
    
    
    Shaban Ibrahim Khamis 100162 Shaban Ibrahim 7
    Alicia Shaban Ibrahim 100163 Alicia Shaban 8
    
    Ideally I should get
    
    Ibrahim (father of Shaban)
    then Shaban the father of Alicia)
    Under Shaban should get Alicia
    Then Zainab (sister of Shaban
    Then Fatma (sister of Shaban)
    Then another member (after I have got Ibrahim and his descendants)
    
    Any idea?
    
    
    
    On Thu, Oct 5, 2023 at 4:15 PM swastik Gurung <gurung_swastik@yahoo.com>
    wrote:
    
    > I suppose you ought to be using, recursive CTE queries
    >
    > Documentation can be found at: 7.8. WITH Queries (Common Table
    > Expressions)
    > <https://www.postgresql.org/docs/current/queries-with.html#QUERIES-WITH-RECURSIVE>
    >
    > 7.8. WITH Queries (Common Table Expressions)
    >
    > 7.8. WITH Queries (Common Table Expressions) # 7.8.1. SELECT in WITH
    > 7.8.2. Recursive Queries 7.8.3. Common Tabl...
    >
    > <https://www.postgresql.org/docs/current/queries-with.html#QUERIES-WITH-RECURSIVE>
    >
    >
    >
    > On Thursday, 5 October 2023 at 16:44:46 GMT+5:45, Ibrahim Shaame <
    > ishaame@gmail.com> wrote:
    >
    >
    > I have a table of members of a large family extendending back to eight
    > generations. The current members contribute a monthly amount to the family
    > fund. Only true descendants are included in the family list, no wives, no
    > husbands. There are two tables
    >
    > 1 - Names with the following fields: idno (unique) --family member
    >
    > parentid -- id number of the parent who connected the child to the family
    >
    > etc
    >
    > etc
    >
    > 2 – Contributions with fields: idno
    >
    > etc
    >
    > etc
    >
    >
    > Now I want to report Names and contributions par family tree: My ideal is
    > to list grandfather, father, children based on the two fields (id,
    > parentid).
    >
    > Any suggestions?
    >
    > Thanks in advance
    >
    >
    >
    
  4. Re: Reporting by family tree

    David G. Johnston <david.g.johnston@gmail.com> — 2023-10-05T15:02:43Z

    On Thu, Oct 5, 2023 at 7:54 AM Ibrahim Shaame <ishaame@gmail.com> wrote:
    
    > WITH RECURSIVE ukoo AS (
    >     SELECT namba,
    >          jina,
    >          baba,
    >          babu,
    >          nasaba_1,
    >          daraja
    >     FROM majina2
    >     WHERE majina2.nasaba_1 IN (SELECT DISTINCT namba FROM majina2)
    >
    > UNION ALL
    >
    >     SELECT mtoto.namba,
    >          mtoto.jina,
    >          mtoto.baba,
    >          mtoto.babu,
    >          mtoto.nasaba_1,
    >          daraja
    >     FROM majina2 mtoto
    >           WHERE mtoto.nasaba_1 NOT IN (SELECT DISTINCT namba FROM majina2)
    >
    >
    The reason it is called a "recursive" CTE is that the subquery following
    the union all is recursive in nature - i.e., it should refer to itself.
    You named the CTE ukoo but you never actually refer to ukoo in the
    recursive subquery.  Thus, you have not written a recursive query.
    
    When you reference the recursive "table" in the subquery its contents
    contain the results of the previous iteration, that is what allows you to
    select a child record and then consider that record a parent when finding
    the next depth/layer of children.
    
    David J.
    
  5. Re: Reporting by family tree

    Ibrahim Shaame <ishaame@gmail.com> — 2023-10-16T11:44:35Z

    Thanks David for the reply. But I think you missed part of the code, which
    refers to ukoo:
    )
    
    SELECT  g.jina AS jina_la_mtoto,
            g.baba AS baba_wa_mtoto,
            g.babu AS babu_wa_mtoto,
            g.namba,
            mzazi.jina AS jina_la_mzazi,
            mzazi.baba AS jina_la_baba_la_mzazi,
            g.daraja
    FROM ukoo g
    JOIN majina2 mzazi
    ON g.namba = mzazi.namba
    ORDER BY g.namba;
    
    Any suggestion?
    Thanks
    
    
    
    On Thu, Oct 5, 2023 at 6:03 PM David G. Johnston <david.g.johnston@gmail.com>
    wrote:
    
    > On Thu, Oct 5, 2023 at 7:54 AM Ibrahim Shaame <ishaame@gmail.com> wrote:
    >
    >> WITH RECURSIVE ukoo AS (
    >>     SELECT namba,
    >>          jina,
    >>          baba,
    >>          babu,
    >>          nasaba_1,
    >>          daraja
    >>     FROM majina2
    >>     WHERE majina2.nasaba_1 IN (SELECT DISTINCT namba FROM majina2)
    >>
    >> UNION ALL
    >>
    >>     SELECT mtoto.namba,
    >>          mtoto.jina,
    >>          mtoto.baba,
    >>          mtoto.babu,
    >>          mtoto.nasaba_1,
    >>          daraja
    >>     FROM majina2 mtoto
    >>           WHERE mtoto.nasaba_1 NOT IN (SELECT DISTINCT namba FROM majina2)
    >>
    >>
    > The reason it is called a "recursive" CTE is that the subquery following
    > the union all is recursive in nature - i.e., it should refer to itself.
    > You named the CTE ukoo but you never actually refer to ukoo in the
    > recursive subquery.  Thus, you have not written a recursive query.
    >
    > When you reference the recursive "table" in the subquery its contents
    > contain the results of the previous iteration, that is what allows you to
    > select a child record and then consider that record a parent when finding
    > the next depth/layer of children.
    >
    > David J.
    >
    >
    
  6. Re: Reporting by family tree

    David G. Johnston <david.g.johnston@gmail.com> — 2023-10-16T13:10:50Z

    On Monday, October 16, 2023, Ibrahim Shaame <ishaame@gmail.com> wrote:
    
    > Thanks David for the reply. But I think you missed part of the code, which
    > refers to ukoo:
    > )
    >
    > SELECT  g.jina AS jina_la_mtoto,
    >         g.baba AS baba_wa_mtoto,
    >         g.babu AS babu_wa_mtoto,
    >         g.namba,
    >         mzazi.jina AS jina_la_mzazi,
    >         mzazi.baba AS jina_la_baba_la_mzazi,
    >         g.daraja
    > FROM ukoo g
    > JOIN majina2 mzazi
    > ON g.namba = mzazi.namba
    > ORDER BY g.namba;
    >
    > Any suggestion?
    >
    
    That part of the query is outside the CTE and thus doesn’t impact the CTE’s
    results.  The part of the query that needs to be self-referencing is the
    subquery inside the CTE under the Union All.
    
    David J.
    
  7. Re: Reporting by family tree

    swastik Gurung <gurung_swastik@yahoo.com> — 2023-10-16T13:29:32Z

    Example Below:
    -- create a test family tablecreate table family as(select 1 as id, null::integer as parent_id, 'Grandfather1' as nameunion allselect 2 as id, null::integer as parent_id, 'Grandfather2' as nameunion allselect 3 as id, 1 as parent_id, 'Father1-1' as nameunion allselect 4 as id, 1 as parent_id, 'Father1-2' as nameunion allselect 5 as id, 2 as parent_id, 'Father2-1' as nameunion allselect 6 as id, 3 as parent_id, 'Son1-1-1' as nameunion allselect 7 as id, 4 as parent_id, 'Son1-2-1' as nameunion allselect 8 as id, 5 as parent_id, 'Son2-1-1' as name);
    -- create a test contribution tablecreate table contribution as(select 1 as contributor_id, '2020-01-01' as date, 300.00 as contribution_amountunion allselect 1 as contributor_id, '2020-02-01' as date, 255.00 as contribution_amountunion allselect 1 as contributor_id, '2020-03-01' as date, 45.65 as contribution_amountunion allselect 2 as contributor_id, '2020-05-01' as date, 22.55 as contribution_amountunion allselect 2 as contributor_id, '2020-01-01' as date, 450.00 as contribution_amountunion allselect 3 as contributor_id, '2020-02-01' as date, 200.00 as contribution_amountunion allselect 4 as contributor_id, '2020-03-01' as date, 150.00 as contribution_amountunion allselect 4 as contributor_id, '2020-04-01' as date, 60.45 as contribution_amountunion allselect 4 as contributor_id, '2020-05-01' as date, 300.00 as contribution_amountunion allselect 5 as contributor_id, '2020-06-01' as date, 1250.00 as contribution_amountunion allselect 6 as contributor_id, '2020-01-01' as date, 66.50 as contribution_amountunion allselect 7 as contributor_id, '2020-02-01' as date, 855.00 as contribution_amountunion allselect 8 as contributor_id, '2020-02-01' as date, 25.00 as contribution_amount);
    -- execute recursive query, all children inheriting contribution sum of parentswith recursive cte as(select f.id, f.parent_id, f.name, c.contribution_amountfrom family fjoin contribution c on f.id = c.contributor_idunion allselect f.id, f.parent_id, f.name, cte.contribution_amountfrom ctejoin family f on cte.id = f.parent_id)select id, name, sum(contribution_amount) as total_contributionfrom ctegroup by id, nameorder by id;
    -- execute recursive query, parents have sum of all contributions of its childrenwith recursive cte as(selectf.id,f.parent_id,f.name,c.contribution_amountfromfamily fjoin contribution c onf.id = c.contributor_idunion allselectf.id,f.parent_id,f.name,cte.contribution_amountfromctejoin family f oncte.parent_id = f.id)selectid,name,sum(contribution_amount) as total_contributionfromctegroup byid,nameorder byid;
    
    Change your SQL accordingly. Also, you can add month field to yield results per month.
  8. Re: Reporting by family tree

    Ibrahim Shaame <ishaame@gmail.com> — 2023-10-17T08:18:20Z

    Thank you David and Swastik, Swastik, I will work on it and will let you
    know.
    Thanks again for your help
    
    On Mon, Oct 16, 2023 at 4:31 PM swastik Gurung <gurung_swastik@yahoo.com>
    wrote:
    
    > Example Below:
    >
    > -- create a test family table
    > create table family as
    > (
    > select
    > 1 as id,
    > null::integer as parent_id,
    > 'Grandfather1' as name
    > union all
    > select
    > 2 as id,
    > null::integer as parent_id,
    > 'Grandfather2' as name
    > union all
    > select
    > 3 as id,
    > 1 as parent_id,
    > 'Father1-1' as name
    > union all
    > select
    > 4 as id,
    > 1 as parent_id,
    > 'Father1-2' as name
    > union all
    > select
    > 5 as id,
    > 2 as parent_id,
    > 'Father2-1' as name
    > union all
    > select
    > 6 as id,
    > 3 as parent_id,
    > 'Son1-1-1' as name
    > union all
    > select
    > 7 as id,
    > 4 as parent_id,
    > 'Son1-2-1' as name
    > union all
    > select
    > 8 as id,
    > 5 as parent_id,
    > 'Son2-1-1' as name);
    >
    > -- create a test contribution table
    > create table contribution as
    > (
    > select
    > 1 as contributor_id,
    > '2020-01-01' as date,
    > 300.00 as contribution_amount
    > union all
    > select
    > 1 as contributor_id,
    > '2020-02-01' as date,
    > 255.00 as contribution_amount
    > union all
    > select
    > 1 as contributor_id,
    > '2020-03-01' as date,
    > 45.65 as contribution_amount
    > union all
    > select
    > 2 as contributor_id,
    > '2020-05-01' as date,
    > 22.55 as contribution_amount
    > union all
    > select
    > 2 as contributor_id,
    > '2020-01-01' as date,
    > 450.00 as contribution_amount
    > union all
    > select
    > 3 as contributor_id,
    > '2020-02-01' as date,
    > 200.00 as contribution_amount
    > union all
    > select
    > 4 as contributor_id,
    > '2020-03-01' as date,
    > 150.00 as contribution_amount
    > union all
    > select
    > 4 as contributor_id,
    > '2020-04-01' as date,
    > 60.45 as contribution_amount
    > union all
    > select
    > 4 as contributor_id,
    > '2020-05-01' as date,
    > 300.00 as contribution_amount
    > union all
    > select
    > 5 as contributor_id,
    > '2020-06-01' as date,
    > 1250.00 as contribution_amount
    > union all
    > select
    > 6 as contributor_id,
    > '2020-01-01' as date,
    > 66.50 as contribution_amount
    > union all
    > select
    > 7 as contributor_id,
    > '2020-02-01' as date,
    > 855.00 as contribution_amount
    > union all
    > select
    > 8 as contributor_id,
    > '2020-02-01' as date,
    > 25.00 as contribution_amount);
    >
    > -- execute recursive query, all children inheriting contribution sum of
    > parents
    > with recursive cte as
    > (
    > select
    > f.id,
    > f.parent_id,
    > f.name,
    > c.contribution_amount
    > from
    > family f
    > join contribution c on
    > f.id = c.contributor_id
    > union all
    > select
    > f.id,
    > f.parent_id,
    > f.name,
    > cte.contribution_amount
    > from
    > cte
    > join family f on
    > cte.id = f.parent_id)
    > select
    > id,
    > name,
    > sum(contribution_amount) as total_contribution
    > from
    > cte
    > group by
    > id,
    > name
    > order by
    > id;
    >
    > -- execute recursive query, parents have sum of all contributions of its
    > children
    > with recursive cte as
    > (
    > select
    > f.id,
    > f.parent_id,
    > f.name,
    > c.contribution_amount
    > from
    > family f
    > join contribution c on
    > f.id = c.contributor_id
    > union all
    > select
    > f.id,
    > f.parent_id,
    > f.name,
    > cte.contribution_amount
    > from
    > cte
    > join family f on
    > cte.parent_id = f.id)
    > select
    > id,
    > name,
    > sum(contribution_amount) as total_contribution
    > from
    > cte
    > group by
    > id,
    > name
    > order by
    > id;
    >
    >
    > Change your SQL accordingly. Also, you can add month field to yield
    > results per month.
    >
    
  9. Re: Reporting by family tree

    Ibrahim Shaame <ishaame@gmail.com> — 2023-10-25T12:20:30Z

    Swastik, I have done as you suggested. What I get is:
    
    id | name | total_contribution
    
    ----+--------------+--------------------
    
    1 | Grandfather1 | 600.65
    
    2 | Grandfather2 | 472.55
    
    3 | Father1-1 | 800.65
    
    4 | Father1-2 | 1111.10
    
    5 | Father2-1 | 1722.55
    
    6 | Son1-1-1 | 867.15
    
    7 | Son1-2-1 | 1966.10
    
    8 | Son2-1-1 | 1747.55
    
    
    But what I want to get is  grandfather - father - children:
    
    1 - Grandfather1
    
    3 - father1-1
    
    6 - son1-1
    
    7 – son1-2
    
    4 - Father1-2
    
    8 - son2-1
    
    2 – Grandfather2
    
    5 - Father2-1
    
    etc
    
    
    Any suggestion
    Thanks
    
    
    
    
    
    On Tue, Oct 17, 2023 at 11:18 AM Ibrahim Shaame <ishaame@gmail.com> wrote:
    
    > Thank you David and Swastik, Swastik, I will work on it and will let you
    > know.
    > Thanks again for your help
    >
    > On Mon, Oct 16, 2023 at 4:31 PM swastik Gurung <gurung_swastik@yahoo.com>
    > wrote:
    >
    >> Example Below:
    >>
    >> -- create a test family table
    >> create table family as
    >> (
    >> select
    >> 1 as id,
    >> null::integer as parent_id,
    >> 'Grandfather1' as name
    >> union all
    >> select
    >> 2 as id,
    >> null::integer as parent_id,
    >> 'Grandfather2' as name
    >> union all
    >> select
    >> 3 as id,
    >> 1 as parent_id,
    >> 'Father1-1' as name
    >> union all
    >> select
    >> 4 as id,
    >> 1 as parent_id,
    >> 'Father1-2' as name
    >> union all
    >> select
    >> 5 as id,
    >> 2 as parent_id,
    >> 'Father2-1' as name
    >> union all
    >> select
    >> 6 as id,
    >> 3 as parent_id,
    >> 'Son1-1-1' as name
    >> union all
    >> select
    >> 7 as id,
    >> 4 as parent_id,
    >> 'Son1-2-1' as name
    >> union all
    >> select
    >> 8 as id,
    >> 5 as parent_id,
    >> 'Son2-1-1' as name);
    >>
    >> -- create a test contribution table
    >> create table contribution as
    >> (
    >> select
    >> 1 as contributor_id,
    >> '2020-01-01' as date,
    >> 300.00 as contribution_amount
    >> union all
    >> select
    >> 1 as contributor_id,
    >> '2020-02-01' as date,
    >> 255.00 as contribution_amount
    >> union all
    >> select
    >> 1 as contributor_id,
    >> '2020-03-01' as date,
    >> 45.65 as contribution_amount
    >> union all
    >> select
    >> 2 as contributor_id,
    >> '2020-05-01' as date,
    >> 22.55 as contribution_amount
    >> union all
    >> select
    >> 2 as contributor_id,
    >> '2020-01-01' as date,
    >> 450.00 as contribution_amount
    >> union all
    >> select
    >> 3 as contributor_id,
    >> '2020-02-01' as date,
    >> 200.00 as contribution_amount
    >> union all
    >> select
    >> 4 as contributor_id,
    >> '2020-03-01' as date,
    >> 150.00 as contribution_amount
    >> union all
    >> select
    >> 4 as contributor_id,
    >> '2020-04-01' as date,
    >> 60.45 as contribution_amount
    >> union all
    >> select
    >> 4 as contributor_id,
    >> '2020-05-01' as date,
    >> 300.00 as contribution_amount
    >> union all
    >> select
    >> 5 as contributor_id,
    >> '2020-06-01' as date,
    >> 1250.00 as contribution_amount
    >> union all
    >> select
    >> 6 as contributor_id,
    >> '2020-01-01' as date,
    >> 66.50 as contribution_amount
    >> union all
    >> select
    >> 7 as contributor_id,
    >> '2020-02-01' as date,
    >> 855.00 as contribution_amount
    >> union all
    >> select
    >> 8 as contributor_id,
    >> '2020-02-01' as date,
    >> 25.00 as contribution_amount);
    >>
    >> -- execute recursive query, all children inheriting contribution sum of
    >> parents
    >> with recursive cte as
    >> (
    >> select
    >> f.id,
    >> f.parent_id,
    >> f.name,
    >> c.contribution_amount
    >> from
    >> family f
    >> join contribution c on
    >> f.id = c.contributor_id
    >> union all
    >> select
    >> f.id,
    >> f.parent_id,
    >> f.name,
    >> cte.contribution_amount
    >> from
    >> cte
    >> join family f on
    >> cte.id = f.parent_id)
    >> select
    >> id,
    >> name,
    >> sum(contribution_amount) as total_contribution
    >> from
    >> cte
    >> group by
    >> id,
    >> name
    >> order by
    >> id;
    >>
    >> -- execute recursive query, parents have sum of all contributions of its
    >> children
    >> with recursive cte as
    >> (
    >> select
    >> f.id,
    >> f.parent_id,
    >> f.name,
    >> c.contribution_amount
    >> from
    >> family f
    >> join contribution c on
    >> f.id = c.contributor_id
    >> union all
    >> select
    >> f.id,
    >> f.parent_id,
    >> f.name,
    >> cte.contribution_amount
    >> from
    >> cte
    >> join family f on
    >> cte.parent_id = f.id)
    >> select
    >> id,
    >> name,
    >> sum(contribution_amount) as total_contribution
    >> from
    >> cte
    >> group by
    >> id,
    >> name
    >> order by
    >> id;
    >>
    >>
    >> Change your SQL accordingly. Also, you can add month field to yield
    >> results per month.
    >>
    >
    
  10. Re: Reporting by family tree

    David G. Johnston <david.g.johnston@gmail.com> — 2023-10-25T14:54:42Z

    On Wed, Oct 25, 2023 at 5:21 AM Ibrahim Shaame <ishaame@gmail.com> wrote:
    
    > But what I want to get is  grandfather - father - children:
    >
    > 1 - Grandfather1
    >
    > 3 - father1-1
    >
    > 6 - son1-1
    >
    > 7 – son1-2
    >
    > 4 - Father1-2
    >
    > 8 - son2-1
    >
    > 2 – Grandfather2
    >
    > 5 - Father2-1
    >
    > etc
    >
    >
    > Any suggestion
    >
    >
    If you want a different ordering of the output change the ORDER BY
    specification.
    
    Specifically, you want to order by the path of each person.  Since that can
    only be determined during the traversal you need to create the path data
    yourself.  I suggest using an integer[] (integer array) to store the path
    using ID values as breadcrumbs.
    
    David J.
    
  11. Re: Reporting by family tree

    o1bigtenor <o1bigtenor@gmail.com> — 2023-10-25T16:13:08Z

    On Wed, Oct 25, 2023 at 9:55 AM David G. Johnston
    <david.g.johnston@gmail.com> wrote:
    >
    > On Wed, Oct 25, 2023 at 5:21 AM Ibrahim Shaame <ishaame@gmail.com> wrote:
    >>
    >> But what I want to get is  grandfather - father - children:
    >>
    >> 1 - Grandfather1
    >>
    >> 3 - father1-1
    >>
    >> 6 - son1-1
    >>
    >> 7 – son1-2
    >>
    >> 4 - Father1-2
    >>
    >> 8 - son2-1
    >>
    >> 2 – Grandfather2
    >>
    >> 5 - Father2-1
    >>
    >> etc
    >>
    >>
    >> Any suggestion
    >>
    >
    > If you want a different ordering of the output change the ORDER BY specification.
    >
    > Specifically, you want to order by the path of each person.  Since that can only be determined during the traversal you need to create the path data yourself.  I suggest using an integer[] (integer array) to store the path using ID values as breadcrumbs.
    >
    >
    (Not the OP just someone following the list trying to learn.)
    
    'using ID values as breadcrumbs' - - - can I interpret that to mean
    the ordinal numbers 1-8 listed (more implied)?
    
    TIA
    
    
    
    
  12. Re: Reporting by family tree

    David G. Johnston <david.g.johnston@gmail.com> — 2023-10-25T22:16:54Z

    On Wed, Oct 25, 2023 at 9:13 AM o1bigtenor <o1bigtenor@gmail.com> wrote:
    
    > On Wed, Oct 25, 2023 at 9:55 AM David G. Johnston
    > <david.g.johnston@gmail.com> wrote:
    > >
    > > On Wed, Oct 25, 2023 at 5:21 AM Ibrahim Shaame <ishaame@gmail.com>
    > wrote:
    > >>
    > >> But what I want to get is  grandfather - father - children:
    > >>
    > >> 1 - Grandfather1
    > >>
    > >> 3 - father1-1
    > >>
    > >> 6 - son1-1
    > >>
    > >> 7 – son1-2
    > >>
    > >> 4 - Father1-2
    > >>
    > >> 8 - son2-1
    > >>
    > >> 2 – Grandfather2
    > >>
    > >> 5 - Father2-1
    > >>
    > >> etc
    > >>
    > >>
    > >> Any suggestion
    > >>
    > >
    > > If you want a different ordering of the output change the ORDER BY
    > specification.
    > >
    > > Specifically, you want to order by the path of each person.  Since that
    > can only be determined during the traversal you need to create the path
    > data yourself.  I suggest using an integer[] (integer array) to store the
    > path using ID values as breadcrumbs.
    > >
    > >
    > (Not the OP just someone following the list trying to learn.)
    >
    > 'using ID values as breadcrumbs' - - - can I interpret that to mean
    > the ordinal numbers 1-8 listed (more implied)?
    >
    >
    Yes, the numbers 1-8 are the values assigned to these 8 example individuals
    as their unique identifiers.
    
    {1}
    {1,3}
    {1,3,6}
    {1,3,7}
    {1,4}
    {1,4,8}
    {2}
    {2,5}
    
    David J.
    
  13. Re: Reporting by family tree

    o1bigtenor <o1bigtenor@gmail.com> — 2023-10-26T11:46:18Z

    On Wed, Oct 25, 2023 at 5:17 PM David G. Johnston
    <david.g.johnston@gmail.com> wrote:
    >
    > On Wed, Oct 25, 2023 at 9:13 AM o1bigtenor <o1bigtenor@gmail.com> wrote:
    >>
    >> On Wed, Oct 25, 2023 at 9:55 AM David G. Johnston
    >> <david.g.johnston@gmail.com> wrote:
    >> >
    >> > On Wed, Oct 25, 2023 at 5:21 AM Ibrahim Shaame <ishaame@gmail.com> wrote:
    >> >>
    >> >> But what I want to get is  grandfather - father - children:
    >> >>
    >> >> 1 - Grandfather1
    >> >>
    >> >> 3 - father1-1
    >> >>
    >> >> 6 - son1-1
    >> >>
    >> >> 7 – son1-2
    >> >>
    >> >> 4 - Father1-2
    >> >>
    >> >> 8 - son2-1
    >> >>
    >> >> 2 – Grandfather2
    >> >>
    >> >> 5 - Father2-1
    >> >>
    >> >> etc
    >> >>
    >> >>
    >> >> Any suggestion
    >> >>
    >> >
    >> > If you want a different ordering of the output change the ORDER BY specification.
    >> >
    >> > Specifically, you want to order by the path of each person.  Since that can only be determined during the traversal you need to create the path data yourself.  I suggest using an integer[] (integer array) to store the path using ID values as breadcrumbs.
    >> >
    >> >
    >> (Not the OP just someone following the list trying to learn.)
    >>
    >> 'using ID values as breadcrumbs' - - - can I interpret that to mean
    >> the ordinal numbers 1-8 listed (more implied)?
    >>
    >
    > Yes, the numbers 1-8 are the values assigned to these 8 example individuals as their unique identifiers.
    >
    > {1}
    > {1,3}
    > {1,3,6}
    > {1,3,7}
    > {1,4}
    > {1,4,8}
    > {2}
    > {2,5}
    >
    
    Thank you Mr David.