Zufallszahl in Datenbank schreiben und Lesen

  • Hallo zusammen!

    Ich habe folgendes Problem und hoffe ihr könnte mir helfen.

    Für eine Immobilien-Seite habe ich ein CMS mit einer Immobilienkomponente installiert. In dieser Komponente kann man beim Anlegen eines Objektes / einer Immobilie dem Objekt eine eigene ID bzw. Referenznummer vergeben. Das erfolgt über ein einfaches Input Textfeld und wird dann in die Datenbank geschrieben. Die Nummer kann man frei eintragen, ohne dass geprüft wird, ob es diese Nummer in der Datenbank schon gibt. Das Input-Feld soll jedoch weg und die Zahl soll nicht mehr frei vergeben, sondern automatisch generiert werden.

    Meine PHP Kenntnisse stecken leider noch in den Kinderschuhen, daher hier die Frage an euch:

    Mit welcher (ich denke mal einfachen Funktion) kann man eine Zufallszahl erzeugen (möglichst nicht mit "time"), die dann in die Datenbank geschrieben wird. (kann auch eine vordefinierte Zahl sein mit einem Präfix) Sobald dann ein Objekt hinzu kommt, soll in der Datenbank geprüft werden, ob es schon ein Objekt bzw. eine Nummer gibt. Gibt es eine, dann soll beim neuen Objekt diese Zahl einfach um 1 (eins) erweitert werden.

    Wie das Schreiben in die Datenbank und Lesen aus ihr funktioniert, weiß ich mittlerweile in etwa, jedoch hab ich kein Plan, wie man das mit einer automatisch generierten Nummer bewerkstelligen kann.

    Ich hoffe ihr versteht was ich meine und habt evtl. eine Idee oder vielleicht ein paar Anregungen?

    Würd mich freuen!
    Danke schon mal

    Gruß
    Heiko

    Wäre es nicht adäquat, den Usus nonetablierter Termini zu minimieren?

  • Um es nochmal kurz zu fassen,

    Zitat

    int mt_rand ( [int $min, int $max] )

    Das int vor den einzelnen Variablen, heisst übersetzt integer und gibt der Variable einfach den Typ Zahl. In den Klammern gibt der erste Parameter die neidrigste, der 2. Parameter die höchste Zahl an. Die Ausgabe wird also irgendeine Zahl zwischen den beiden Werten ergeben.

    Gruß Spacefish | Spacefish.eu - Webdesign

  • Schon mal nicht schlecht!

    Wie könnte denn eine Funktion aussehen, bei der ich eine Zahl vorgebe?

    Gut wäre sowas:

    immo-1234501
    immo-1234502
    immo-1234503
    immo-1234504
    immo-1234505

    immo = Präfix + Fortlaufende Zahl

    Wird die erste Immobilie eingetrage, bekommt das erste Objekt die Nummer immo-1234501, wird ein weiteres Objekt hinzugefügt, soll in der Datenbank geprüft werden ob es schon eine Nummer gibt, wenn ja, dann einfach die Zahl +1 und dem neuen Objekt zuordnen.

    Wäre es nicht adäquat, den Usus nonetablierter Termini zu minimieren?

  • So eine ID kannst du aber nicht in INT speichern

    Code
    function createNewID(){
       $highest_id_query = mysql_query("SELECT MAX(ID) as high_id FROM tabelle LIMIT 1";);
       $highest_id = mysql_fetch_assoc($highest_id_query);
       $newid = $highest_id['high_id']+1;
       return 'immo-'.$newid;
    }


    Mal on-the-run, ich garantiere für nix

  • Warum nicht als INT? Funktioniert auto_increment nur bei einem Feld?
    Schon mal vielen dank!!!

    Das probier ich gleich mal aus.

    Wäre es nicht adäquat, den Usus nonetablierter Termini zu minimieren?

  • Ein Integerwert besteht nur aus ganzzahlingen Zahlen (in einem gewissen wertebereich) , deine ID trägt aber noch die Chars "immo-" davor, daher kannst du sie auch nicht als Int abpeichern...

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • Zitat von mr.scruff

    Mit welcher kann man eine Zufallszahl erzeugen

    Zitat von mr.scruff


    immo = Präfix + Fortlaufende Zahl


    Ja was denn nu???

  • Zitat von No0ob
    Code
    function createNewID(){
       $highest_id_query = mysql_query("SELECT MAX(ID) as high_id FROM tabelle LIMIT 1";);
       $highest_id = mysql_fetch_assoc($highest_id_query);
       $newid = $highest_id['high_id']+1;
       return 'immo-'.$newid;
    }

    Damit bekomm ich irgendwie nix hin. Liegt aber vielleicht daran, dass ich es mit Joomal probiere.

    Meine Abfrage sieht jetzt so aus:

    Code
    function createNewID(){
       $highest_id_query = mysql_query("SELECT MAX(ID) as high_id FROM #__estateagen LIMIT 1");
       $highest_id = mysql_fetch_assoc($highest_id_query);
       $newid = $highest_id['high_id']+1;
       return 'immo-'.$newid;

    In der Datenbank habe ich zuvor ein neues Feld "high_id" angelegt und einen Startwert (1000) eingetragen. Aber irgendwie passiert nix, wenn ich die Seite aufrufe.

    Bei Joomla sieht eine Datenbankabfrage bspw. so aus:


    Code
    $query = "SELECT id, cat, type, title, description, rent, rooms, space"
    	. " FROM #__estateagent"
    	. " WHERE hot=1 AND publish=1 ORDER BY id DESC LIMIT $limit";
    
    
    $database->setQuery( $query );
    $rows = $database->loadObjectList();

    Ich dachte ich käme da leichter rein.

    Wäre es nicht adäquat, den Usus nonetablierter Termini zu minimieren?

  • Habt ihr schon mal was von Race Conditions gehört? Anscheinend nicht, denn dann käme man nicht auf die verrückte Idee, sich eine ID aus dem letzten ID-Wert einer Tabelle zu berechnen.