![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 24.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam!
W bazie MySQL są tabele: ksiazki(id, tytul, wydawca, rok, dzial), autorzy(id, nazwisko, tytuł naukowy, miejsce, inne). Relacja między nimi to "wiele do wiele". Dlatego stworzyłem też tabelę: autorzyksiazek(id_ksiazki, id_autora). Mam stronkę, na której jest wyświetlana lista książek. Dane rekordów pochodzą tylko z tabeli ksiazki. Dane prezentowane są w formie listy: Kod wygląda tak: " $db_name = "nuke"; $con = mysql_connect("localhost", "root", "") or die("Blad otwarcia bazy"); $db = mysql_select_db($db_name, $con) or die("Otwarcie tabeli nie powiodło się"); $sql = "select * from k_ksiazki"; $result = mysql_query($sql, $con) or die("Błąd połączenia"); print "<html><body>"; while ($record = mysql_fetch_array($result)) { $id_ksiazki = $record[0]; $tytul_ksiazki = $record[1]; $n_wydawcy = $record[2]; $rok = $record[3]; $dzial = $record[4]; $indeks = $record[5]; print "<br>ID Książki: $id_ksiazki, Tytuł: <b>$tytul_ksiazki</b><br>Wydana przez: <b>$n_wydawcy</b> w roku <b>$rok</b>. Przypisana do działu: <b>$dzial</b>. <br> Autorzy: NIE_WIEM_CO_TU_WPISAĆ"; } print "</body></html>"; " Chciałbym, aby za słowem Autorzy (na końcu skryptu), pojawiła się lista wszystkich autorów. Problem polega na tym, że aby wyświetlić listę autorów, trzeba najpierw: 1. wskazać id książki z tabeli ksiazki, 2. sprawdzić w tabeli autorzyksiazek, jakie numery id autorów przypisane są do danego numeru id ksiązki, 3. sprawdzić, jakie jest nazwisko autora, który ma dane id. Najlepiej byłoby za słowem "Autorzy" wstawić nazwę zmiennej, ale nie wiem jak ją zdefiniować i w którym miejscu umieścić. Ponieważ to jest mysql, to złożony select odpada. Prawdopodobnie bedę musiał wykonywać jakieś operacje na zmiennych bedących wynikami poszczególnych poleceń select. Nie mam pojęcia jak się do tego zabrać. Czy ktoś mógłby pomóc? Proszę wskazać choćby metodę, o gotowe rozwiązanie nei mam odwagi prosić (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam BŁażej |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 24.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Dzięki, ale nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Przerobiłem to trochę, żeby dostosować do mojej bazy, ale wywala mi "Błąd połączenia 2". Kod, który napisałeś, wstawiłem (bez <? i ?>) zaraz za mysql_connect i mysql_select_db. Wygląda to teraz tak: " function pobierz_autorow($id_ksiazki) { $sql2 = "SELECT n_autor FROM k_autorzy INNER JOIN k_autorzyksiazek ON k_autorzy.id_autora=k_autorzyksiazek.id_autora WHERE k_autorzyksiazek.id_ksiazki=$id_ksiazki"; $result2 = mysql_query($sql2, $con) or die("Błąd połączenia 2"); $autorzy = ''; while ($record = mysql_fetch_array($result2)) { $autorzy .= $record['n_autor']; } return $autorzy; } " Natomiast w liście napisałem tak: " print "<html><body>"; while ($record = mysql_fetch_array($result)) { $id_ksiazki = $record[0]; $tytul_ksiazki = $record[1]; $n_wydawcy = $record[2]; $rok = $record[3]; $dzial = $record[4]; $indeks = $record[5]; print "<br>Tytuł książki: <b><font size=\"4\">$tytul_ksiazki</b></font> Numer grzebietowy: <b>$id_ksiazki</b><br>Wydana przez: <b>$n_wydawcy</b> w roku <b>$rok</b>. Przypisana do działu: <b>$dzial</b>. <br> Autorzy: "; print pobierz_autorow($id_ksiazki); print "<br>"; } print "</body></html>"; " Na czym polega błąd? Może samo zapytanie SELECT jest źle przeze mnie poprawione? Wyjaśnię może, że tabele nazywają się: k_ksiazki(id_ksiazki-PRIMARY KEY, tytul_ksiazki, n_wydawcy; brak innych kluczy), k_autorzy(id_autora-PRIMARY KEY, n_autor - KLUCZ typu INDEX, ZAWIERA NAZWISKA AUTORÓW, tyt_autor; brak innych kluczy), k_autorzyksiazek(id_autora, id_ksiazki; PRIMARY KEY na obu polach łącznie). Ten post edytował qtchb 25.08.2004, 08:23:56 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 08:03 |