3

我在 mysql 中有 5 个表,形成 4 个一对多关系。这些表是 last_name、parent、child、grandchild 和 city。姓有很多父母,父母有很多孩子,孩子有很多孙子,城市有很多孙子。

我需要以随机顺序获取孙子(在某个城市),但按 last_name 分组(即,在不同的行上但连续)但 last_name 以随机顺序分组。所以基本上。

Last_name     GrandChild
    B            3
    B            56
    B            9
    D            2
    D            67
    C            38
    C            20
    A            14

到目前为止我有这个

 SELECT ln.id, gc.id
        FROM parent p
        INNER JOIN child ch
        ON ch.parent_id = p.id
        INNER JOIN grandchild gc
        ON ch.id = gc.child_id
        WHERE gc.city_id = 3

这只是给了我需要的布局和关系,但我不确定从那里去哪里。这可能吗?如果是这样,我需要研究哪些命令/技术?

4

2 回答 2

3

我假设“分组”是指您希望每个孙子都在单独的行上,但在连续行上都具有相同的姓氏。

    SELECT ln.id, gc.id
    FROM parent p INNER JOIN
         child ch
         ON ch.parent_id = p.id INNER JOIN
         grandchild gc
         ON ch.id = gc.child_id inner join
         (select ln.*, rand() as rand
          from lastname ln
         ) ln
         on p.lastname = ln.lastname
    WHERE gc.city_id = 3
    order by ln.rand

换句话说,这会为姓氏分配一个随机数,然后将其用于排序依据。顺便说一句,你的要求是模棱两可的。如果您希望按父级而不是姓氏排序,您可以在父级上执行子查询。

于 2012-12-02T00:06:04.330 回答
0
    SELECT gc.lastname, group_concat(p.lastname) as grandchildren
    FROM parent p
    INNER JOIN child ch ON ch.parent_id = p.id
    INNER JOIN grandchild gc ON ch.id = gc.child_id
    WHERE gc.city_id = 3
    group by gc.lastname
于 2012-12-01T23:51:37.733 回答