Ich muss den Bereich der ganzen Zahl in MySQL auswählen. So etwas Ähnliches
SELECT RANGE(10,20) AS range;
gibt
zurück 10, 11, 12, 13, 14, ..., 20
Warum?
Ich möchte eine zufällige Telefonnummer aus dem Bereich auswählen, der noch nicht registriert ist. Das ist eine Idee.
SELECT RANGE(100000,999999) AS range FROM phone WHERE phoneNum <> range LIMIT FLOOR(100000 + RAND()*(899999);
Probleme mit Ihrer Abfrage:
range
nicht in der WHERE-Klausel verwenden. Es ist ein Alias und wird erst nach der WHERE-Klausel definiert. <>
verwenden. Im Allgemeinen könnten Sie IN(...)
verwenden, aber in Ihrem speziellen Fall sollten Sie BETWEEN 100000 and 999999
verwenden und die Notwendigkeit einer RANGE
Funktion vermeiden. ORDER BY RAND()
. Versuchen Sie es mit dieser Abfrage:
%Vor%Wenn Sie eine Nummer suchen möchten, die nicht in Ihrer Tabelle enthalten ist und die verfügbaren Zahlen nicht knapp sind (sagen wir weniger als 80%), wäre es ein guter Ansatz, Zufallszahlen zu erzeugen und zu prüfen, ob sie zugewiesen sind eine, die nicht ist.
Eine reine MySQL-Lösung existiert vielleicht, aber ich denke, sie benötigt einige verdrehte Joins, Random und Modul.
Eine Alternative:
Erstellen Sie zuerst eine Tabelle mit nur Zahlen, die alle Zahlen von 1 bis MAX_NUM enthält.
Verwenden Sie dann diese Abfrage:
%Vor%Auf diese Weise können Sie auch mehrere Zahlen relativ schnell erhalten, indem Sie den Grenzwert ändern.