Autor Zpráva
xciza
Profil
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
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0