我需要在MySQL中选择整数范围。像这样的东西
SELECT RANGE(10,20) AS range;
返回
10, 11, 12, 13, 14, ..., 20
为什么吗
我想从尚未注册的范围中选择随机电话号码。这是个主意。
SELECT RANGE(100000,999999) AS range FROM phone WHERE phoneNum <> range LIMIT FLOOR(100000 + RAND()*(899999);
答案 0 :(得分:9)
查询问题:
range
。它是一个别名,只会在执行WHERE子句后定义。<>
将数字与一组数字进行比较也没有意义。一般情况下,您可以使用IN(...)
,但在特定情况下,您应该使用BETWEEN 100000 and 999999
并避免使用RANGE
函数。 ORDER BY RAND()
的随机项目。尝试使用此查询:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
如果你想找到一个不在你的表中的数字并且可用的数字不接近耗尽(比如分配少于80%),一个好的方法是生成随机数并检查它们是否被分配直到找到一个不是。
可能存在纯MySQL解决方案,但我认为它需要一些扭曲连接,随机和模数。
答案 1 :(得分:0)
替代方案:
首先创建一个只包含数字的表,其中包含从1到MAX_NUM的所有数字。
然后使用此查询:
SELECT n.id as newNumber
FROM numbers AS n
LEFT JOIN phone AS p
ON p.phoneNum = n.id
WHERE
p.phoneNum IS NULL AND
n.id BETWEEN lowerLimit AND upperLIMIT
ORDER BY RAND()
LIMIT 1
通过这种方式,您还可以通过更改限制值来相对快速地获得多个数字。