Autor | Zpráva | ||
---|---|---|---|
xciza Profil |
#1 · Zasláno: 15. 5. 2014, 19:48:00
Ahoj,
chtěl bych se zaptat jak řešíte například při registraci uživatele zápis do dvou tabulek současně, které jsou provázané cizím klíčem? Mám na mysli třeba: User vyplní formulář s username, password a to se uloží to jedné tabulky a do druhé tabulky se uloží dodatečné informace z formuláře(jméno, telefon,...). V tabulce user je pouze username a heslo (+ autoincrement id pro usera) + cizí klíč do tabulky user-info . Jak vyřešit vložení toho cizího klíče do tabulky user a poté hned jako primární klíč do tabulky user-info? Generovat nějaký náhodný číslo? Díky |
||
juriad Profil |
#2 · Zasláno: 15. 5. 2014, 19:53:32
Vložit do tabulky user. Pomocí mysql_insert_id (nebo obdobou) zjistíš, jaké id bylo přiřazeno.
Následně vložíš záznam do tabulky user_info, teď už znáš id uživatele, takže s cizím klíčem není problém. Odkaz v databázi vede z tabulky user_info do tabulky user. Nikoli opačně. A má vůbec smysl ta data rozdělovat? Vždyt si v dotazu můžeš požádat jen o vyjmenované sloupce. |
||
xciza Profil |
#3 · Zasláno: 15. 5. 2014, 19:56:05
nj ale co kdyz se me budou registrovat 2 uzivatele na jednou? to se muzou ty id pak promichat a muze se prohodit dodatecne info ne?
Odkazy prohodim. Rád bych je rozdelil protoze dodatecneho infa bude docela dost a nepotrebuji ho k prihlasovani. |
||
Alphard Profil |
#4 · Zasláno: 15. 5. 2014, 20:00:11
Nemohou, vrácené id závisí na konkrétním připojení.
To, že další info nepotřebujete k přihlašování nutně neznamená, že je důvod pro další tabulku, ale může být vhodnější, záleží na situaci. |
||
juriad Profil |
#5 · Zasláno: 15. 5. 2014, 20:02:25
A co tě vede k tomu, že chceš optimalizovat rychlost přihlašování? Kromě toho, že to nemá vůbec smysl, nic ti nebrání vybrat jen některé sloupce.
Optimalizuj jen to, co je prokazatelně (opakovaně jsi to změřil). mysql_insert_id vrací id vytvořeného záznamu právě provedeným INSERTem v aktuálním vláknu v aktuálním spojení s databází. Nic se pomíchat nemůže. |
||
Časová prodleva: 10 let
|
0