我正在尝试创建一个查询,为我的表中的每个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等等...
答案 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