Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Problem z dodawaniem rekordu do 2 tablic
Forum PHP.pl > Forum > Bazy danych > MySQL
lobopol
Mam bazę danych o dość prostej strukturze
  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `login` varchar(25) NOT NULL,
  4. `password` char(40) NOT NULL,
  5. `email` varchar(255) NOT NULL,
  6. `registered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `login` (`login`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
  10.  
  11. -- user_id to tutaj wysyłający a mb_id to skrzynka do której ma wiadomość dotrzeć
  12. CREATE TABLE `message` (
  13. `id` int(11) NOT NULL AUTO_INCREMENT,
  14. `mb_id` int(11) NOT NULL,
  15. `user_id` int(11) NOT NULL,
  16. `message_topic` varchar(255) NOT NULL,
  17. `content` text NOT NULL,
  18. PRIMARY KEY (`id`),
  19. KEY `mb_id` (`mb_id`),
  20. KEY `user_id` (`user_id`),
  21. CONSTRAINT `mb_id` FOREIGN KEY (`mb_id`) REFERENCES `message_box` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  22. CONSTRAINT `user_idm` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  24.  
  25. -- ----------------------------
  26.  
  27. -- ----------------------------
  28. CREATE TABLE `message_box` (
  29. `id` int(11) NOT NULL AUTO_INCREMENT,
  30. `user_id` int(11) NOT NULL,
  31. PRIMARY KEY (`id`),
  32. UNIQUE KEY `user_id` (`user_id`),
  33. CONSTRAINT `user_id_mb` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  34. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Jakie ułożyć zapytanie aby tworząc użytkownik od razu tworzyłaby się skrzynka na wiadomości dla niego, czy trzeba to jakoś rozbić na dwa zapytania?
blooregard
Na dwa.
Dodajesz usera, pobierasz jego ID (zakładam, że jest to klucz AUTO_INCREMENT i po tym identyfikujesz userów w systemie) f-cją mysql_insert_id(), a następnie używasz go dla pola 'user_id' tabeli message (zakładam, że jest to pole tworzące relację pomiędzy tymi dwiema tabelami, a będące ID usera)
Mchl
A jaką funkcję ma w ogóle tabela message_box? Czy jeden użytkownik może mieć więcej niż jedną skrzynkę?
lobopol
Nie jeden użytkownik może mieć tylko jedną skrzynkę, rozumiem o co ci chodzi czy jest sens tej tablicy posiadania, teraz się właśnie zastanawiam czy nie zamienić
`mb_id` int(11) NOT NULL, w message na odbiorce gdzie odbiorca byłby kluczem obcym wskazującym na id w users.
Mchl
Jeśli rzeczywiście jeden użytkownik - jedna skrzynka, to będzie to najlepsze rozwiązanie.

Chyba że ze skrzynką związane są jeszcze jakieś inne kolumny, które mają sens tylko w kontekście wysyłania/odbierania wiadomości. Można je wtedy wydzielić do osobnej tabeli (nazywa się to partycjonowaniem pionowym). Wtedy jednak kolumna ID takiej tabeli nie powinna być AUTO_INCREMENT tylko być właśnie kluczem obcym (z atrybutem UNIQUE) do głównej tabeli.
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.