代码之家  ›  专栏  ›  技术社区  ›  John Conde

一个父行,另一个表中的多个子行。怎么把它们排成一排?

  •  1
  • John Conde  · 技术社区  · 14 年前

    我是当地一家非营利组织的志愿者,该组织在节日期间发放玩具和食品。我帮助他们的一个方法是把他们的礼物/食物请求放到网上。这样,他们不用在15个小时内手动将1000个左右的名字输入Excel,只需单击一个链接,就可以在几秒钟内导出整个内容。

    我的问题是如何在一个查询中从数据库获取数据。我相信这是可能的,但我不能完全相信我能做到。

    有一个父表,其中包含将收到礼物的孩子的家庭信息(每个家庭1行)。有一个子表,其中包含族的子级信息(每个子级1行,每个父级行多行)。每个父行将有1-3个子行。

    PARENT TABLE
    -----------------------------
    id
    name
    address
    city
    
    CHILDREN TABLE
    -----------------------------
    parent_id
    name
    gift1
    gift2
    gift3
    

    我想在从数据库导出数据时,将所有孩子的信息与父母的信息放在一行中,这样就可以将其放入CSV文件中。我知道我可以用两个独立的查询来完成,但如果可能的话,我不想访问每个家庭孩子的数据库。

    我已经思考了一个小时左右,还不知道如何才能做到这一点。我肯定我需要加入表格,但我不确定如何区分每个孩子,避免重复,而不是得到下一个孩子(如果有一个)。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Quassnoi    14 年前

    由于每个家长的子代数目是可变的,因此,在 SQL 在一个记录中以分号分隔的方式呈现所有礼物:

    SELECT  p.*, GROUP_CONCAT(c.name, ': ', c.gift1, ', ', c.gift2, ', ', c.gift3 SEPARATOR ';')
    FROM    parents p
    JOIN    children с
    ON      c.parent_id = p.id
    GROUP BY
            p.id
    

    这会给你这样的东西:

    parent      children_and_gifst
    Mr. Jones   Alice: teddy bear, candy, drum; Bob: pup, sword, flute