MYSQL - 查询以选择限制为父ID的随机行

时间:2015-08-14 14:24:10

标签: mysql sql

我正在尝试创建一个查询,为我的表中的每个parent_id选择2个随机行。 目前,我的查询总是返回每个parent_id的前2个id。 (例如:parent_id = 1的1,2)。

我的表目前如下:

 private void ExecuteSecure(Action action)
    {
        if (InvokeRequired)
        {
            Invoke(new MethodInvoker(() => action()));
        }
        else
        {
            action();
        }
    }

我目前的查询是:

id, title  , parent_id
 1, Title1 ,         1
 2, Title2 ,         1
 3, Title3 ,         1
 4, Title4 ,         2
 5, Title5 ,         2 
 6, Title6 ,         2 
 7, Title7 ,         2
 8, Title8 ,         3
 9, Title9 ,         3
10, Title10,         3

我希望我的结果可以在每个查询中进行更改,例如,一个结果将返回id为1,3的parent_id = 1,一个将返回2,3等等...

1 个答案:

答案 0 :(得分:1)

尝试将order by rand()子句移动到自己的派生表

SELECT id,title,parent_id, rn
FROM (SELECT (@rn := if(@parent_id = parent_id, @rn + 1,
                        if(@parent_id := parent_id, 1, 1)
                       )
             ) as rn,
             t1.*   
      FROM ( SELECT * FROM meals CROSS JOIN
           (SELECT @rn := 0, @parent_id := '') params
           ORDER BY rand() ) t1
      ORDER BY parent_id 
     ) meals
WHERE rn <= 2
ORDER BY id ASC

documentation