mysql unique number generation
Ich möchte erzeugen eine einzigartige random-integer (von 10000 bis 99999) Identität nur durch saubere mySQL; irgendwelche Ideen?
Ich nicht wollen, zu generieren, diese Zahl in php, Radfahren (generieren-Nummer -> überprüfen Sie in der Datenbank), da möchte ich nutzen, um einige intelligente Lösung in einer mySQL-Abfrage.
InformationsquelleAutor der Frage hippout | 2010-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwar scheint es etwas umständlich, das ist, was getan werden kann, um das Ziel zu erreichen:
Einfach ausgedrückt, es erzeugt N Zufallszahlen, wobei N die Anzahl der Zeilen der Tabelle, filtert diese bereits in der Tabelle vorhanden, und die Grenzen der übrigen zu setzen.
Könnte es etwas langsam bei großen Tabellen. Um die Dinge zu beschleunigen, könnten Sie eine Ansicht erstellen aus diesen eine eindeutige id, und verwenden Sie es anstelle von geschachtelten select-Anweisung.
EDIT: Zitate entfernt
InformationsquelleAutor der Antwort unclenorton
Aufbau einer look-up-Tabelle aus folgenden zahlen zu randomisierten id-Werte im Bereich von 1 bis 1M:
(Dies dauert etwa 30 Sekunden laufen auf meinem laptop. Sie hätte nur das tun müssen, einmal für jede Sequenz.)
Nun haben Sie die Zuordnung, einfach verfolgen, wie viele verwendet wurden (ein Zähler oder auto_increment-Schlüssel-Feld in einer anderen Tabelle).
InformationsquelleAutor der Antwort Martin
Kämpfte ich mit der Lösung hier für eine Weile und dann festgestellt, es schlägt fehl, wenn die Spalte NULL-Einträge. Ich überarbeitete diese mit dem folgenden code;
Fiddle hier;
http://sqlfiddle.com/#!2/620de1/1
Hoffe, dass es hilfreich 🙂
InformationsquelleAutor der Antwort HeavyHead
Die einzige halbwegs vernünftige Idee, die ich mit oben kommen kann ist das erstellen einer Tabelle mit einem endlichen pool von IDs und wie Sie verwendet werden, entfernen Sie Sie aus dieser Tabelle. Diese Schlüssel können eindeutig sein und kann ein Skript erstellt werden, um zu generieren in der Tabelle. Dann könnten Sie ziehen eine dieser Tasten durch die Erzeugung eines random wählen Sie aus den verfügbaren Tasten. Ich sagte "halbwegs" vernünftig und ehrlich, dass war viel zu großzügig, aber es schlägt nach dem Zufallsprinzip generieren von Schlüsseln, bis Sie erstellen eine einzigartige, nehme ich an.
InformationsquelleAutor der Antwort James
Meine Lösung, implementiert in Cakephp 2.4.7, ist das erstellen einer Tabelle mit einem auto_incremental-Typ-Feld
Dann habe ich eine php-Funktion, so dass jedes mal legen Sie einen neuen Datensatz, liest die erzeugte id und löschen Sie Sie sofort.
Mysql hält in seinem Speicher-counter status. Alle zahlen, die generiert werden, sind einzigartig, bis Sie einen reset der mysql-counter oder führen Sie eine TRUNCATE TABLE-Vorgang
nachfolgend finden Sie die Modell erstellt, in Cakephp umsetzen
Alle Prüfungen auf den Bereich der Zugehörigkeit, der das Ergebnis umgesetzt werden können, in der gleichen Funktion, durch Manipulation das Ergebnis
InformationsquelleAutor der Antwort Granduca
Die Funktion RAND() wird eine zufällige Zahl erzeugt, aber nicht Einzigartigkeit garantieren. Die richtige Art und Weise zu behandeln eindeutige Bezeichner in MySQL ist zu erklären, Sie mit AUTO_INCREMENT.
Beispielsweise das id-Feld in der folgenden Tabelle nicht geliefert werden müssen auf Einsätze, und es wird immer um 1 erhöht:
InformationsquelleAutor der Antwort Kaleb Brasee
Ich habe versucht, zu verwenden diese Antwortaber es hat nicht funktioniert für mich, also musste ich die ursprüngliche Abfrage ändern, ein wenig.
InformationsquelleAutor der Antwort Ankur
Erstellen Sie einen eindeutigen index auf das Feld, das Sie wollen das einzigartige random #
Führen
Update IGNORE Table
Set RandomUniqueIntegerField=FLOOR(RAND() * 1000000);
InformationsquelleAutor der Antwort user3649739
Mache ich mir sorgen über warum Sie dies tun wollen, aber Sie könnten einfach verwenden:
Sehen, die volle MySQL RAND-Dokumentation für weitere Informationen.
Ich hoffe jedoch, dass Sie Sie nicht verwenden diese als unique identifier (verwenden Sie ein auto_increment-Attribut auf eine entsprechend große vorzeichenlose integer-Feld, wenn das ist, was Sie nach) und ich Frage mich, warum Sie verwenden würden, MySQL für diese und nicht eine scripting Sprache. Was wollen Sie erreichen?
InformationsquelleAutor der Antwort John Parker