Wie generieren Sie einzigartige random-Wert für jeden Benutzer in laravel und hinzufügen zur Datenbank
Ich bin der Entwicklung einer event-Organisation-website. Hier, wenn der Nutzer registriert sich für ein Ereignis, erhält er eine eindeutige Zufallszahl(10-stellig), die wir verwenden, erzeugen Sie ein barcode-und E-mail es ihm. Nun,
- Ich möchte, um die eindeutige Nummer für jedes registrierte Ereignis.
- Und auch random
One-Lösung ist, greifen alle die Zufallszahlen in ein array und erzeugen einer Zufallszahl mit Php rand(1000000000, 9999999999) und in einer Schleife durch und prüfen Sie alle Werte. Schnappen Sie sich den ersten Wert, der nicht gleich einem der Werte in das array und fügen Sie die Datenbank.
Aber ich denke, dass es vielleicht eine bessere Lösung für dieses. Jede Anregung?
Von "einzigartig für jedes registrierte Ereignis" meinst du, dass eine zufällige Zahl für die Veranstaltung Ein muss unterscheidbar sein von einer Zufallszahl für Ereignis B?
Ich glaube nicht, dass die interpretation, aber es scheint logisch. Wenn ja, meine Antwort wäre leicht zu ändern, aber.
Ich glaube nicht, dass die interpretation, aber es scheint logisch. Wenn ja, meine Antwort wäre leicht zu ändern, aber.
InformationsquelleAutor Nasif Md. Tanjim | 2015-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Logik ist nicht technisch defekt. Jedoch, wenn Ihre Anwendung zieht eine Menge von Benutzern, Holen alle von den Zufallszahlen kann auch unnötig teuer in Bezug auf Ressourcen und Rechenzeit.
Ich würde vorschlagen, einen anderen Ansatz, wo man eine Zufallszahl erzeugen und dann überprüfen Sie es gegen die Datenbank.
InformationsquelleAutor Joel Hinz
Können Sie unter Verwendung der php - uniqid() Funktion generiert eine eindeutige ID basierend auf dem microtime (aktuelle Uhrzeit in Mikrosekunden)
Beispiel:
Ausgabe:
InformationsquelleAutor Abhijeet Ashok Muneshwar
Schleife durch das array wird nicht sein, dass effiziente. Wenn Ihre Datenbank zu groß wird, dann ist es verlangsamen den gesamten Prozess und auch, es könnte eine seltene situation, wenn 2 threads sind einer Schleife durch das array für die gleiche zufällige Zahl und es wird gefunden werden, zur Verfügung und Rückkehr derselben Nummer für die tickets.
Also statt einer Schleife über das array können Sie die 10-stellige Registrierungs-id als primary key und statt einer Schleife durch das array, das Sie einfügen können, die Registrierungs-details zusammen mit zufällig generierten Nummer, wenn die Datenbank insert-operation erfolgreich ist, können Sie wieder die Registrierungs-id ein, aber wenn nicht, dann generieren die Zufallszahl und einfügen.
Alternative Lösung, die effektiver sein
Anstelle der 10-stelligen zufälligen zahlen, die Sie verwenden können, Zeitstempel generiert eine 10-stellige eindeutige Identifikationsnummer zu machen, und random Sie können randomize die ersten 2 oder 3 Ziffern der timestamp
sind Sie noch auf der Suche nach einer alternativen Lösung?
InformationsquelleAutor Pavan Jiwnani
Das ist gut:
InformationsquelleAutor Hadi Note
Beispiel für die Nutzung
InformationsquelleAutor Takamura
Machte ich so etwas
InformationsquelleAutor Mladen Janjetovic
Vermeiden das problem, dass Sie überprüfen, um zu sehen, ob ein passender code vorhanden ist, jedes mal eine neue erstellt, habe ich einfach fangen MySQL Datensatz duplizieren exception (Fehlercode 1062). Wenn Sie, dass Fehler abgefangen wird, habe ich nur die Funktion erneut aufrufen, bis der Speichervorgang erfolgreich ist. So, es hat nur erzeugen Sie einen neuen code, wenn es kollidiert mit einer vorhandenen. Läuft viel schneller-aber offensichtlich wird es ein wenig langsamer als die Anzahl der Benutzer nähert sich die Zahl der möglichen barcodes.
Also einfach eine Schleife durch alle Benutzer, die Sie zuordnen möchten, einen code zu:
Könnten Sie auch hinzufügen, ein wenig Logik zu entkommen, die Funktion Schleife, wenn eine maximale Anzahl von versuchen gemacht werden, aber ich habe nie die Mühe, weil Kollisionen unwahrscheinlich sind.
InformationsquelleAutor possemedia