Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacja jeden do wielu
Forum PHP.pl > Forum > PHP
k_uba
Witam Sorrki ze was tak mecze ale chcialbym sie nauczyc paru rzeczy.
A wiec do rzeczy.
Mam nastepujaca strukture bazy:
Mam tabele dokumenty gdzie podczas wprowadzania nowego rekordu podaje sie slowa kluczowe dla dokumentu. Stworzylem tabele slowa oraz tabele laczeniowa dokumenty_slowa. Stworzylem relacje do tych tabel jak je tworzylem (tak mi sie przynajmniej wydawaje). Oto te tabele

  1. CREATE TABLE `dokumenty` (
  2. `Id_dokumenty` int(11) NOT NULL AUTO_INCREMENT,
  3. `Rodzaj` varchar(50) collate utf8_polish_ci NOT NULL,
  4. `Tytul` varchar(100) collate utf8_polish_ci NOT NULL,
  5. `Rok_wydania` date NOT NULL,
  6. `Slowo_klucz` varchar(50) collate utf8_polish_ci NOT NULL,
  7. `Data_dodania` date NOT NULL,
  8. `Nick` varchar(50) collate utf8_polish_ci NOT NULL,
  9. PRIMARY KEY (`Id_dokumenty`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


  1. CREATE TABLE `slowa` (
  2. `Id_slowa` int(11) NOT NULL AUTO_INCREMENT,
  3. `slowo` varchar(200) collate latin1_general_ci DEFAULT NULL,
  4. PRIMARY KEY (`Id_slowa`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


  1. CREATE TABLE `dokumenty_slowa` (
  2. `Id_dokumenty` int(11) NOT NULL,
  3. `Id_slowa` int(11) NOT NULL AUTO_INCREMENT,
  4. PRIMARY KEY (`Id_slowa`),
  5. KEY `Id_dokumenty` (`Id_dokumenty`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


Dodaaje wpisy do bazy po przez skrypt:
  1. <?php
  2. $conn=@mysql_connect("XXX","XXX","XXX");
  3. @mysql_select_db("XXX",$conn);
  4.  
  5. mysql_query("INSERT INTO dokumenty (id_dokumenty, rodzaj, tytul, rok_wydania, slowo_klucz, data_dodania, Nick) VALUES('','$rodzaj', '$tytul_nowe', '$rok-$miesiac-$dzien', '$slowo_klucz_nowe', '$data', '$login');") or die(mysql_error());
  6.  
  7. for ($i=0; $i < count($rozbite) ; $i++) {
  8.  mysql_query("INSERT INTO slowa (Id_slowa, slowo) VALUES ('', '$rozbite[$i]');") or die(mysql_error());
  9. }
  10. ?>


I moje pytanie jak to zrobic aby dodaly mi sie teraz do tableli laczeniowej wpadly jedno id_dokumentu oraz kilka id_slowa
Zyx
Tabele łącznikowe dodaje się w relacji wiele-do-wielu, a nie jeden-do-wielu. Natomiast jeśli już chcesz do niej coś dodać, to musisz pobrać identyfikatory ostatnio utworzonych wierszy i użyć je do wypełnienia trzeciej tabelki.
k_uba
Ok
Chcialem tak robic i podczas upload'u zrobilem dla id_dokumentu = select max(id_dokumenty) i dodawal mi 0
Zyx
A mysql_insert_id() znasz?
porady-it.pl
Mała modyfikacja w tabeli łącznikowej:

  1. CREATE TABLE IF NOT EXISTS `dokumenty_slowa` (
  2. `Id_dokumenty` int(11) NOT NULL,
  3. `Id_slowa` int(11) NOT NULL,
  4. PRIMARY KEY (`Id_dokumenty`,`Id_slowa`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


  1. <?php
  2. $conn=@mysql_connect("xxx","xxx","xxx");
  3. @mysql_select_db("php",$conn);
  4.  
  5. $rodzaj = 'rodzaj';
  6. $tytul_nowe = 'jais tytul';
  7. $rok = '2009';
  8. $miesiac = '04';
  9. $dzien = '19';
  10. $slowo_klucz_nowe = 'test';
  11. $data = '2009-04-19';
  12. $login = 'login';
  13.  
  14. //dodanie dokumentu
  15. mysql_query("INSERT INTO dokumenty
  16.                (rodzaj, tytul, rok_wydania, slowo_klucz, data_dodania, Nick) VALUES
  17.                ('$rodzaj', '$tytul_nowe', '$rok-$miesiac-$dzien', '$slowo_klucz_nowe', '$data', '$login')") or die(mysql_error());
  18.  
  19. //pobranie identyfikatora dodanego rekordu
  20. $dokument_id = mysql_insert_id();
  21.  
  22. //przykładowy ciąg znaków, który rozbijamy na słowa
  23. $rozbite = explode(" ","ten skrypt tworzy przykladowa liste slow");
  24.  
  25. //przechodzimy po elementach tablicy
  26. for ($i=0; $i < count($rozbite) ; $i++) {
  27.  
  28.        //dodanie słowa do bazy
  29.    mysql_query("INSERT INTO slowa (slowo) VALUES ('{$rozbite[$i]}');") or die(mysql_error());
  30.  
  31.        //pobranie identyfikatora dodanego słowa
  32.    $slowo_id = mysql_insert_id();
  33.  
  34.        //dodanie powiązania pomiędzy dokumentem a dodwanymi słowami
  35.    mysql_query("INSERT INTO dokumenty_slowa (Id_slowa, Id_dokumenty) VALUES ($slowo_id ,$dokument_id);") or die(mysql_error());
  36. }
  37. ?>
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.