order by:如果两个或多个结果与限制1匹配则随机化

时间:2015-06-01 01:58:40

标签: mysql phpmyadmin

SELECT * FROM my_database ORDER BY priority DESC LIMIT 1

MY_DATABASE:

 name | priority 
##################
 dave |   100
 pat  |   100
 jo   |    99

1:当有两个可能的结果且限制设置为1时,决定因素是什么?

2:你能在两个可能的匹配之间添加随机化吗?怎么样?

3 个答案:

答案 0 :(得分:3)

  

1:当有两个可能的结果且限制设置为1时,决定因素是什么?

除非我们通过主键指定排序(或字段组合以使DB完全清楚如何订购),否则我们无法预测将显示两个可能结果中的哪一个。数据库引擎将确定这一点。

我尝试了查询(示例:http://www.sqlfiddle.com/#!9/e2df77/2SELECT * FROM test ORDER BY priority DESC LIMIT 1,Pat出现了。然后我试了SELECT * FROM test where priority = 100 ORDER BY priority DESC LIMIT 1,Dave出现了。道德:除非你明确地告诉数据库如何订购信息,否则不要指望结果。

  

2:你能在两个可能的匹配之间添加随机化吗?怎么样?

您可以使用RAND()订购查询。

SELECT * FROM test where priority = 100 
ORDER BY priority DESC, RAND() DESC LIMIT 1

上述变体可用于随机化。 order by rand()order by field, rand()可以使用。

示例:http://www.sqlfiddle.com/#!9/e2df77/3

答案 1 :(得分:2)

如果您想在最高优先级之间进行随机化,请使用:

ORDER BY priority DESC, rand()
LIMIT 1

答案 2 :(得分:0)

  1. 您只能得到1个结果,另一个将被丢弃。出现在顶部的人将被选中,其余的将被丢弃。

  2. 是的,您可以随机化并仍然限制获得1个结果,但它会丢弃ORDER BY priority DESC部分。您只需将查询设置为SELECT * FROM my_database ORDER BY RAND() LIMIT 1;

相关问题