按随机顺序按组随机排序

时间:2012-12-01 23:48:50

标签: mysql sql random

我在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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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