从数据库随机取5条
用户数据
SELECT * FROM user WHERE id >= ((SELECT MAX(id) FROM user)-(SELECT MIN(id) FROM user)) * RAND() + (SELECT MIN(id) FROM user) LIMIT 5
这段SQL语句是在网上找的,想请问一下 id >= ((SELECT MAX(id) FROM user)-(SELECT MIN(id) FROM user)) * RAND() + (SELECT MIN(id) FROM user)
是怎么达到随机获取的?TKS
如果我改成 id >= 1
,则顺序取出了id为1,2,3,4,5的用户!
这段sql
SELECT * FROM user WHERE id >= ((SELECT MAX(id) FROM user)-(SELECT MIN(id) FROM user)) * RAND() + (SELECT MIN(id) FROM user) LIMIT 5
是执行了5次吗?如果一次的话,结果应该就不是随机的了,就像id >=?
某个值了,取出来是连续的!
先说我测试的结论,LIMIT 5调用了很多次where后的查询条件。
这样LIMIT 5的含义我用了一个例子证实了一下。
例子:
1.创建test表,两个字段:主键id,count
2.创建mysql function
3.执行一下语句
SELECT * FROM user WHERE id >= (select fun()) LIMIT 5
4.看一下test表,
id count
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 1
13 1
14 1
至于为什么会执行这么多次function,我认为是跟limit的机制有关
明白题目的意思了,理解错误抱歉。
更新:我的user表是14条数据,现在目测的原因是LIMIT前的where条件,同LIMIT函数遍历了整个表单,也是就是执行了14次