ВЫБЕРИТЕ диапазон целых чисел в MySQL.Например.1,2,3,4, ..., п; - PullRequest
10 голосов
/ 08 декабря 2010

Мне нужно выбрать диапазон целых чисел в 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);

Ответы [ 2 ]

9 голосов
/ 08 декабря 2010

Проблемы с вашим запросом:

  1. Вы не можете использовать range в предложении WHERE.Это псевдоним, и он будет определен только после выполнения предложения WHERE.
  2. Даже если вы можете его использовать, сравнивать число с набором чисел с помощью <> не имеет смысла.В общем, вы можете использовать IN(...), но в вашем конкретном случае вы должны использовать BETWEEN 100000 and 999999 и избегать необходимости в функции RANGE.
  3. Если вам нужно только одно число, тогда предел должен быть 1, а не случайным.Обычно для выбора случайных предметов вы используете 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%). Хороший подход - генерировать случайные числа и проверять, назначены ли они, пока вы не найдете одно, которое не соответствует.

AЧистое решение MySQL может существовать, но я думаю, что ему нужны некоторые скрученные объединения, случайные и модули.

0 голосов
/ 08 декабря 2010

Альтернатива:

Прежде всего создайте таблицу с просто числами, в которой есть все числа от 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

Таким образом, вы также можете относительно быстро получить несколько номеров, изменив предельное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...