SELECT * FROM my_database ORDER BY priority DESC LIMIT 1
MY_DATABASE:
name | priority
##################
dave | 100
pat | 100
jo | 99
1:当有两个可能的结果且限制设置为1时,决定因素是什么?
2:你能在两个可能的匹配之间添加随机化吗?怎么样?
答案 0 :(得分:3)
1:当有两个可能的结果且限制设置为1时,决定因素是什么?
除非我们通过主键指定排序(或字段组合以使DB完全清楚如何订购),否则我们无法预测将显示两个可能结果中的哪一个。数据库引擎将确定这一点。
我尝试了查询(示例:http://www.sqlfiddle.com/#!9/e2df77/2)SELECT * 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()
可以使用。
答案 1 :(得分:2)
如果您想在最高优先级之间进行随机化,请使用:
ORDER BY priority DESC, rand()
LIMIT 1
答案 2 :(得分:0)
您只能得到1个结果,另一个将被丢弃。出现在顶部的人将被选中,其余的将被丢弃。
是的,您可以随机化并仍然限制获得1个结果,但它会丢弃ORDER BY priority DESC
部分。您只需将查询设置为SELECT * FROM my_database
ORDER BY RAND()
LIMIT 1;