Problemy z Twoim zapytaniem:
- Nie możesz użyć
rangew klauzuli WHERE. Jest to alias i zostanie zdefiniowany dopiero po wykonaniu klauzuli WHERE. - Nawet gdybyś mógł go użyć, nie ma sensu porównywać liczby z zestawem liczb za pomocą
<>. Ogólnie możesz użyćIN(...), ale w konkretnym przypadku powinieneś użyćBETWEEN 100000 and 999999i uniknąć potrzebyRANGEfunkcjonować. - Jeśli chcesz tylko jedną liczbę, limit powinien wynosić 1, a nie coś losowego. Zwykle do wybierania losowych przedmiotów używasz
ORDER BY RAND().
Spróbuj użyć tego zapytania:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Jeśli chcesz znaleźć liczbę, której nie ma w Twojej tabeli, a dostępne liczby nie są bliskie wyczerpania (powiedzmy, że przydzielono mniej niż 80%), dobrym podejściem byłoby wygenerowanie liczb losowych i sprawdzenie, czy są one przypisane, dopóki nie znajdziesz takiej, która jest nie.
Może istnieć czyste rozwiązanie MySQL, ale myślę, że wymaga kilku skręconych złączeń, losowych i modułowych.