Problémy s vaším dotazem:
- Nemůžete použít
range
v klauzuli WHERE. Je to alias a bude definován až po provedení klauzule WHERE. - I kdybyste to mohli použít, nedává smysl porovnávat číslo se sadou čísel pomocí
<>
. Obecně můžete použítIN(...)
, ale ve vašem konkrétním případě byste měli použítBETWEEN 100000 and 999999
a vyhněte se potřeběRANGE
funkce. - Pokud chcete pouze jedno číslo, limit by měl být 1, ne něco náhodného. K výběru náhodných položek obvykle používáte
ORDER BY RAND()
.
Zkuste použít tento dotaz:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Pokud chcete najít číslo, které není ve vaší tabulce, a dostupná čísla nejsou téměř vyčerpána (řekněme, že je přiřazeno méně než 80 %), bylo by vhodné vygenerovat náhodná čísla a zkontrolovat, zda jsou přiřazena, dokud nenajdete takové, které je 't.
Čisté řešení MySQL může existovat, ale myslím, že potřebuje nějaké zkroucené spoje, náhodné a modulové.