mySQL - Select 根据值顺序记录,然后在一次查询中随机记录
mySQL - Select records based on value in order, then random records in one query
我希望有一个 mySQL 查询,我可以在其中 select 将所有记录设置为特定值,然后 select 从剩下的记录中提取一些其他记录, 顺序随机。
为了解释,这里有一个例子:(MyTable
数据库table)
ID Name SomeValue
1 Fred 0
2 Jake 0
3 Jone 1
4 Bill 0
5 Greg 0
6 Thom 2
7 Jane 3
8 Erin 0
所以首先,我想 select 所有 SomeValue
大于 0 的记录。适当的 mySQL 查询是:
SELECT * FROM MyTable WHERE SomeValue > 0 ORDER BY SomeValue DESC
这会 return:
7 Jane 3
6 Thom 2
3 Jone 1
接下来(在同一个查询中),如何从剩余的记录中随机 select 3 个其他记录(限制 6)?
所以记录 returned 的最终结果看起来像这样:
7 Jane 3
6 Thom 2
3 Jone 1
5 Greg 0 // Randomly picked
1 Fred 0 // Randomly picked
8 Erin 0 // Randomly picked
使用union all
:
(select t.*
from t
where somevalue > 0
) union all
(select t.*
from t
where somevalue = 0
order by rand()
limit 3
);
如果您想要按 somevalue
排序的值,请添加 order by
一些值作为查询的最后一行。
我希望有一个 mySQL 查询,我可以在其中 select 将所有记录设置为特定值,然后 select 从剩下的记录中提取一些其他记录, 顺序随机。
为了解释,这里有一个例子:(MyTable
数据库table)
ID Name SomeValue
1 Fred 0
2 Jake 0
3 Jone 1
4 Bill 0
5 Greg 0
6 Thom 2
7 Jane 3
8 Erin 0
所以首先,我想 select 所有 SomeValue
大于 0 的记录。适当的 mySQL 查询是:
SELECT * FROM MyTable WHERE SomeValue > 0 ORDER BY SomeValue DESC
这会 return:
7 Jane 3
6 Thom 2
3 Jone 1
接下来(在同一个查询中),如何从剩余的记录中随机 select 3 个其他记录(限制 6)?
所以记录 returned 的最终结果看起来像这样:
7 Jane 3
6 Thom 2
3 Jone 1
5 Greg 0 // Randomly picked
1 Fred 0 // Randomly picked
8 Erin 0 // Randomly picked
使用union all
:
(select t.*
from t
where somevalue > 0
) union all
(select t.*
from t
where somevalue = 0
order by rand()
limit 3
);
如果您想要按 somevalue
排序的值,请添加 order by
一些值作为查询的最后一行。