Mailinglisten-Archive |
At 21:25 2000-08-14 +0200, you wrote: >On Mon, 14 Aug 2000, Robert Hoffmann wrote: > > > > eigentlich schon, aber wie gesagt: Sie IST erfolgreich. Wie > > > man vielleicht erkennen kann, wird hiermit ein User-Account > > > angelegt, und dieser Account ist nachher auch vorhanden, nur > > > weiss ich halt nicht seine ID ! > > > > Einfach mal reingefragt : Warum möchtest du die ID wissen? Wenns nur für > > interne DB-Zwecke ist, kannst du das Ganze Problem auch umgehen... > > Nein, ich kann es nicht wirklich umgehen, abgesehen davon, > dass ich das auch nicht ganz einsehen wuerde... Ich brauche diese > Funktion an vielen Stellen in meinem Script, und wenn ich auf sie > verzichten wollte, koennte ich direkt auf AUTO_INCREMENT > verzichten, das waer auch nicht Sinn der Sache! Die ID von einer > Tabelle muss ich uebrigens in einer anderen Tabelle eintragen > (als Referenz darauf), und so kann ich auf diese Funktion nicht > verzichten. > Aeh, aber da ich mich jetzt an jeden Strohhalm klammere > trotzdem die Frage: Was meinst Du mit Umgehen? Ich sehe jetzt nur > eine Moeglichkeit: Ich frage die Datenbank selber nach den IDs, > nehme die hoechste Zahl und addiere eins, und schon "glaube ich > zu wissen", was MySQL als naechste ID verwenden wird... bei Multi > User Systemen ist das aber schon hart an der Grenze, oder an was > dachtest Du? Nun ja, ich hatte auch mal das Problem mit dem Autoincrement (jedoch unter Sybase, das spielt aber hier keine Rolle). Du könntest hingehen und deine IDs selbst verwalten. Dazu schaltest du autoincrement aus und dann: Du erstellst eine Zusatztabelle die nichts mit den restlichen zu tun hat. Nennen wir sie mal "internaldata". In dieser Tabelle erstellst du ein Feld "internal_lastid" oder so ähnlich (ist ja egal wie's heisst).Da schreibst du zum Beispiel 0 rein als Anfangswert. Nun musst du nur vor dem Anlegen des Users ein kleines Query abfeuern (die Tabelle ist sehr sehr klein, und das Query auch, daher vernachlässigbarer rechenaufwand) : Select internal_lastid from internaldata; Den inhalt setzt du in eine Variable ($id). Dann machst du ein $id++; und schon hast du deine Id mit der du den User anlegen kannst oder was auch immer du tun willst. diese Id schreibst du anschliessend zurück in die Tabelle internaldata. Ausserdem kannst du diese Id in alle Tabellen reinschreiben die sich aufeinander beziehen... Mit autoincrement hatte ich schon mal Probleme dass ich Tests mit Tabelle1 machte und dann für diese Tabelle der Autoincrement-Wert bei x stand und für Tabelle2 auf x-y somit war die Sch...am dampfen... Mit der obigen Lösung hast du übrigens eine Tabelle in der du alle internen Daten schon verwalten kannst, quasi eine ini-datei in der DB. -- Hoffmann Robert aus Luxemburg gruesst die PHP-Gemeinde... --
php::bar PHP Wiki - Listenarchive