Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Baza danych - relacje
Forum PHP.pl > Forum > Bazy danych
kwi4tusz3k
Witam, nie wiem czy pisze dobrym watpu. Chodzi mi o baze danych w phpmyadmin. Problem polega na tym ze nie moge stworzyc relacji pomiedzy tabelami.
Tabela1: id, imie, nazwisko, data, numer telefonu, adres Tabela2: id, imie, nazwisko, obecnosc. Chcialbym aby jesli dodajemy do Tabela1 osobe to Tabela2 pobierala imie i nazwisko. Czy mozna zrobic takie powiazanie? Czy prosciej zrobic w formularzu zeby osoby byly dodawane do dwoch tabel?
Sephirus
Odpowiadając ogólnie - da się to zrobić za pomocą tzw. triggerów (AFTER INSERT na Tabela1 - w nim dodajemy imie i nazwisko do Tabela2 - możesz o tym poczytać).

A teraz na poważnie - robisz coś na maksa źle. Jeśli masz taką strukturę:

Tabela1

id | imie | nazwisko | data | numer_telefonu | adres

Tabela2

id | imie | nazwisko | obecnosc

To wystarczy ją znormalizować. Objaśnię Ci, po krótce o co chodzi ale też o tym poczytaj.

Zostaw sobie tabelę 'Tabela1' tak jak jest natomiast Tabela2 zrób tak:

Tabela2

id | id_Tabela1 | obecnosc

Imię i nazwisko już masz w tabeli 'Tabela1' więc nie ma sensu wpisywać jej znowu do 'Tabela2'. Wystarczy dodać relację do odpowiedniego rekordu z tabeli 'Tabela1'.

Przy dodawaniu nowego uzytkownika dodajesz go normalnie do Tabela1 a potem tworzysz rekord w Tabela2 z id_Tabela2 takim jakie ID ma ten ostatni wpis z Tabela1.

Przy pobieraniu danych z Tabela2 wystarczy wówczas prosty join:

  1. SELECT t2.id, t1.imie, t1,nazwisko, t2.obecnosc FROM Tabela2 t2
  2. JOIN Tabela1 t1 ON t2.id_Tabela1 = t1.id
kwi4tusz3k
Dzieki za odpowiedz. Teraz pamietam ze kiedys tak robilem tez na zajeciach ale sie zapomina. Nie bardzo rozumiem to

Przy dodawaniu nowego uzytkownika dodajesz go normalnie do Tabela1 a potem tworzysz rekord w Tabela2 z id_Tabela2 takim jakie ID ma ten ostatni wpis z Tabela1.
Sephirus
Robisz normalnie insert do tej pierwszej tabeli.

Potem pobierasz tzw ostatnio dodane ID (zakładam że id w tabelkach mają autoincrement). Dla funkcji z rodziny mysql_* to po prostu mysql_insert_id() a dla PDO to $pdoObj->lastInsertId();

Mając to ID, możesz teraz dodać to tabeli drugiej rekord podając to id jako id_tabeli1 aby zachować relację.

  1. mysql_query("INSERT INTO tabela1 (imie,nazwisko,data,...) VALUES (....)");
  2.  
  3.  
  4. mysql_query("INSERT INTO tabela2 (id_tabeli1,obecnosc) VALUES ({$id},...)");


Trochę jaśniej? 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-2025 Invision Power Services, Inc.