Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] jak powiazac dane w tabelach?
Forum PHP.pl > Forum > Bazy danych > MySQL
mazc
witam tongue.gif
juz probuje zrozumiec to dosc sporo czasu i nadal nie bardzo wiem jak moge to zrobic

przykladowo mam tab1 a w niej

tab1
-------
id pk auto |
login |
pass |
id_tab2|

oraz druga tab2

tab2
------
id pk auto |
nazwa |
nazwisko |

jakiego polecenia trzeba uzyc zeby nastapilo takie cos:

uzytkownil zalogowal sie do swojego konta, ale dane o nim sa przechowywane w tabeli tab2
teraz gdy wpisze swoje imie i nazwisko (moze to nastapic odrazu lub dopiero pozniej) to dostanie unikalny id w tab2
ponadto ten sam id zostanie dopisany w tab1 w polu id_tab2
, oczywiscie tab2.id moze byc rozne od tab1.id

dziekuje z gory za pomoc...
phpion
W tab2 pole id powinno być kluczem głównym (czyli tak jak masz teraz) oraz równocześnie kluczem obcym odnoszącym się do tab1 do pola id. Sugerowałbym równocześnie zmianę nazwy kolumny z tab2 z "id" na "tab1_id" - będzie bardziej czytelnie.
mazc
dziekuje za odpowiedz

chodzili mi bardziej o kod w jaki sposob to zapisac

czy jezeli beda te klucze obce w tej tab1 to po dodaniu wiersza w tab2 automatycznie wstawi wartosc??

Tak czy jak?
  1. CREATE TABLE `tab1` (
  2. `id` INTEGER AUTO_INCREMENT ,
  3. `login` char (32) NOT NULL DEFAULT '',
  4. `pass` char (32) NOT NULL DEFAULT '',
  5. `id_tab2` INTEGER DEFAULT '0',
  6. PRIMARY KEY (`id`)
  7. );
  8.  
  9. CREATE TABLE `tab2` (
  10. `id` INTEGER AUTO_INCREMENT ,
  11. `imie` char (32) NOT NULL DEFAULT '',
  12. `nazwisko` char (32) NOT NULL DEFAULT '',
  13. PRIMARY KEY (`id`)
  14. );

czy tak?
  1. CREATE TABLE tab1 (
  2. id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. login CHAR NULL,
  4. pass CHAR NULL,
  5. tab2_id INTEGER UNSIGNED NOT NULL,
  6. PRIMARY KEY(id),
  7. INDEX tab1_FKIndex1(tab2_id)
  8. );
  9.  
  10. CREATE TABLE tab2 (
  11. id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  12. imie CHAR NULL,
  13. nazwisko CHAR NULL,
  14. PRIMARY KEY(id)
  15. );


uzywam dbdesignerow ;p co sam nie bardzo nie rozumiem tych relacji.. :/ tzn nie wiem jak polaczyc ;/

Poprostu chodzi mi o to zeby uzytkownik mogl na zalozyc acc
dalsze info moze zalozyc pozniej ale w miedzy czasie inny moze chciec zalozyc wiec tab.id moze nie zgadzac sie z danymy z tab2.id

Jak to jest z tym fk jezeli w ten tab1 jak teraz bedzie ten fk na id_tab2, to jezeli wprowadze dane do tab1 to automatycznie w tab2 dostane klucz czy jak to bedzie?

prosze o odpowiedzi na wszystkie pytania;p

edit...


jeszcze cos takeigo wymyslilem przez phpadmin..:S

  1. CREATE TABLE `tab2` (
  2. `id` int(11) NOT NULL,
  3. `imie` varchar(32) NOT NULL,
  4. `nazwisko` varchar(32) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin2;
  7.  
  8. CREATE TABLE `tab1` (
  9. `id` varchar(11) NOT NULL,
  10. `login` varchar(32) NOT NULL,
  11. `pass` varchar(32) NOT NULL,
  12. PRIMARY KEY (`id`),
  13. CONSTRAINT `tab1_ibfk_1` FOREIGN KEY (`id`) REFERENCES `tab1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  14. ) ENGINE=InnoDB DEFAULT CHARSET=latin2;



prosze powiedziec ktore drobe.. albo mnie poprawic smile.gif z gory dzieki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.