Probleme mit Ihrer Anfrage:
- Sie können
range
nicht verwenden in der WHERE-Klausel. Es ist ein Alias und wird erst definiert, nachdem die WHERE-Klausel ausgeführt wurde. - Auch wenn Sie es gebrauchen könnten, macht es keinen Sinn, eine Zahl mit einem Satz von Zahlen zu vergleichen, indem Sie
<>
verwenden . Im Allgemeinen könnten SieIN(...)
verwenden , aber in Ihrem speziellen Fall sollten SieBETWEEN 100000 and 999999
verwenden und vermeiden Sie die Notwendigkeit einesRANGE
Funktion. - Wenn Sie nur eine Zahl wollen, dann sollte das Limit 1 sein, nicht etwas Zufälliges. Um zufällige Artikel auszuwählen, verwenden Sie normalerweise
ORDER BY RAND()
.
Versuchen Sie es mit dieser Abfrage:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Wenn Sie eine Zahl finden möchten, die nicht in Ihrer Tabelle enthalten ist, und die verfügbaren Zahlen nicht annähernd erschöpft sind (z. B. weniger als 80 % zugewiesen sind), wäre ein guter Ansatz, Zufallszahlen zu generieren und zu prüfen, ob sie zugewiesen sind, bis Sie eine finden, die keine ist nicht.
Eine reine MySQL-Lösung mag existieren, aber ich denke, sie braucht einige Twisted Joins, Random und Modulus.