Problemy z Twoim zapytaniem:
- Nie możesz użyć
range
w 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 999999
i uniknąć potrzebyRANGE
funkcjonować. - 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.