【问题标题】:Random Order by Group in Random Order以随机顺序按组随机排序
【发布时间】:2012-11-19 20:09:51
【问题描述】:

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

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

【问题讨论】:

    标签: mysql sql random


    【解决方案1】:
        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
    

    【讨论】:

      【解决方案2】:

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

          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()
      • 天哪,太棒了!不仅用于查询,还用于解释它的作用。我还必须以随机顺序得到孙子,所以我只是像包裹姓氏一样包裹孙子。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2016-10-03
      • 2011-06-18
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多