按组随机排序的随机顺序

3
我在mysql中有5个表,形成4个一对多的关系。这些表是last_name、parent、child、grandchild和city。LastName有许多父母,Parent有许多孩子,Child有许多孙子,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

这只是给了我所需的布局和关系,但我不确定接下来该怎么做。这种操作是否可行?如果可以,我需要查看哪些命令/技术?

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

换句话说,这将随机数分配给姓氏,然后将其用于排序。顺便说一下,您的请求有歧义。如果您想按父母而不是姓氏进行排序,则应在父母上进行子查询。

不错。我认为 OP 需要:order by ln.rand,RAND() - ypercubeᵀᴹ
哇塞,太棒了!不仅查询成功了,而且还解释了它的作用。我还需要以随机顺序获取孙子女,所以我就像你包装姓氏一样包装了孙子女。谢谢! - Helba

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接