Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacje w tabelach
Forum PHP.pl > Forum > Bazy danych
Raffal
Witam
mam taki dylemat

chce stworzyc proste wyświetlanie produktów które mozna podzielic na grupy , długo zastanawiałem sie czy oprzec to na formie plików czy baz danych no ale skusilem sie na baze i tu wystapil moj problem stworzylem sobie dwie tabele i chcialbym zeby wszystkie produkty byly w jednej tablei natomiast zeby byla mozliwosc podzielenie jej na kategorie
  1. CREATE TABLE `kategoria` (
  2. `id_produktu` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(100) NOT NULL,
  4. `data` date NOT NULL,
  5. PRIMARY KEY (`id_produktu`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


oraz

  1. CREATE TABLE `produkty` (
  2. `id` int(100) NOT NULL AUTO_INCREMENT,
  3. `id_produktu` int(11) NOT NULL,
  4. `size` varchar(100) NOT NULL,
  5. `screw` varchar(100) NOT NULL,
  6. `code` varchar(100) NOT NULL,
  7. `box` varchar(100) NOT NULL,
  8. `Price` varchar(100) NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


no ale mam problem tzn nie umiem tworzyc relacji , gdy probowalem skorzystac z tego co wyczytalem w NECIE to wyrzucalo mi potrzezne bledy z brakiem jakiejkolwiek składni , aha i korzystam z PHPmyAdmin smile.gif Jezeli ktos bylby wstanie wytłumaczyc mi jak stworzyc to polaczenie w tym przypadku bylbym wdzieczny
Marr
Dla Twojego zastosowania wystarczy, że w obu tabelach kolumny id_produktu zmienisz sobie na id_kategorii (bo tak jak jest teraz jest mylace). Później listując zawartość kategorii w php wystarczy, że skonstruujesz zapytanie do mysql'a w klauzula WHERE - w Twoim przypadku np: 'SELECT * FROM produkty WHERE id_kategorii = "2";' i w ten sposób będziesz miał wybrane wszystkie produkty z 2 kategorii. Więcej filozofii na tym etapie wg mnie nie trzeba.

btw. używając operacji złączenia (JOIN) możesz sobie w jednym zapytaniu pobrać nazwy kategorii do której należy dany produkt listując wszystkie produkty - tak jakbyś chciał sobie zrobić też poza kategoriami, ale to tak poza konkursem.
Raffal
tzn chyba troszke uproscilem swoj problem dokladnie wyglada to tak:

mam foldery z ktorych wybieram jedna opcje , wczytuja sie produkty a po kliknieciu w ktorys z nich otwiera mi sie plik do danego produktu. Jakbys to proponowal zrobic?
Marr
no to jezeli chodzi o tabele to wg mnie spokojnie wystarczy w Twoim przypadku.

"folder" - to u Ciebie tabela `kategoria`
folder zawiera pliki - `kategoria` zawiera `produkty`

,a więc robisz działając w php, robisz sobie plik np. kategoria.php gdzie pobierasz sobie elementy należące do danej kategorii (id kategorii możesz przekazać jako parametr np. metodą GET). Robisz sobie zapytanie w stylu
  1. <?php
  2. $zapytanie = mysql_query('SELECT * FROM produkty WHERE id_kategorii = "$_GET['kategoria']";');
  3. while ($rekord = mysql_fetch_assoc($zapytanie){
  4. // odwolujesz sie do danego pola w mysqlu w sposob $rekord['nazwa_pola']
  5. // listujesz sobie wszystkie elementy z tej kategorii, mozesz sobie od razu podlinkowac je odpowiednio np.
  6. // echo '<a href="/produkty/$rekord['id'].doc">link do pliku .doc o id takim jak w bazie w folderze produkty</a>';
  7. }
  8. ?>


i dzieki temu masz listowanie produktow nalezacych do danej kategorii - jak elementy kategorii sa linkami do plików mozesz to listowanie zrobic na wzór mojego przykładu.. Możesz też zmodyfikować link w sposób by kierował do pliku php , który realizuje pobranie i wyświetlenie szczegółów nt. elementu - robisz sobie link np <a href="info.php?id=$rekord['id']">nazwa_linku</a> i w pliku info.php pobierasz sobie informacje z tabeli produkty WHERE id="rekord['id]"...

btw.. wiem, że troche gmatwam i można byłoby czytelniej to napisać ale po ciężkim dniu ledwo myśle...
Raffal
prubuje to zrobić własnie tym sposobem co napisales , no i widze to tak.

wczytuja sie odpowiednie kategorie
  1. "SELECT * FROM kategorie"

i sa wyswietlana klikajaca je przesylana jest w adresie zmiena do nastepnego pliku gdzie wykonywane jest zapytanie sql

  1. "SELECT * FROM produkty where id_kategorii="$id_kategorii


czy oto dokładnie Ci chodziło?
Marr
no tak, w tym drugim pliku bierzesz sobie zmienna $id_kategorii z $_GET'a lub $_POST'a - w zależności od tego jak przesłałeś tą zmienną. powinno załatwić sprawę, jak coś nie działa, to pokaż odpowiednie kody 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.