Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] Pobieranie Danych I Wyświetlanie, Relacja "wiele do wiele"
qtchb
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
qtchb
post
Post #2





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 24.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Świetnie!

Prawie działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Teraz wyświetla mi na stronie listę wszystkich ksiązek, ale jeśli chodzi o autorów, to podaje mi dane tylko po jednym autorze do 2 z 6 książek, przy pozostałych 4 książkach za słowem Autorzy nie pojawia się nic.

Sprawdziłem w bazie, do dwóch książek przypisany jest jeden autor, do pozostałych po dwóch, trzech.

Wyświetlani są więc tylko autorzy tych książek, przy których jest jeden autor. Jeśli autorów jest więcej, nie wyświetla niczego.

Jak to ugryźć?

Oto cały kod strony:
  1. <?php
  2. $module_name = &#092;"Listak\";
  3. $module_name2 = &#092;"Dodajk\";
  4.  
  5. if (!eregi(&#092;"modules.php\", $PHP_SELF)) {    die (\"Nie możesz odczytać tej strony inaczej, jak tylko poprzez Portal Kancelarii
    .
  6. .\"); }
  7. $index = 0;
  8.     global $admin, $user, $module_name;
  9.     include(\"header.php\");
  10.     OpenTable();
  11.  
  12. echo \"<h1> Lita wszystkich książek Kancelarii</h1>\";
  13. echo \"<h3> Poniższa tabela zawiera informacje o wszystkich książkach, jakie zostały wp
  14. owadzone do naszej <b>Biblioteki</b>.</h3>\";
  15.  
  16. $db_name = \"nuke\";
  17. $con = mysql_connect(\"localhost\", \"root\"\"\") or die(\"Blad otwarcia bazy\");
  18. $db = mysql_select_db($db_name, $con) or die(\"Otwarcie tabeli nie powiodło się\");
  19.  
  20. $sql = \"select * from k_ksiazki\";
  21. $result = mysql_query($sql, $con) or die(\"Błąd połączenia\");
  22.  
  23. print \"<html><body>\";
  24.  
  25. while ($record = mysql_fetch_array($result)) { 
  26. $id_ksiazki = $record[0];
  27. $tytul_ksiazki = $record[1]; 
  28. $n_wydawcy = $record[2]; $rok = $record[3];
  29. $dzial = $record[4];
  30. $indeks = $record[5];
  31.  
  32. print \"<br>Tytuł książki: <b><font size=\"4\">$tytul_ksiazki</b></font> 
  33. Numer grzebietowy: <b>$id_ksiazki</b>
  34. <br>Wydana przez: <b>$n_wydawcy</b> 
  35. w roku <b>$rok</b>. 
  36. Przypisana do działu: <b>$dzial</b>. 
  37. <br> Autorzy: \"; 
  38.  
  39. $sql2 = &#092;"SELECT id_autora 
  40. FROM k_autorzyksiazek 
  41. WHERE id_ksiazki=$id_ksiazki&#092;";
  42.  
  43. $result2 = mysql_query($sql2, $con) or die (mysql_error());
  44. $count = mysql_num_rows($result2);
  45.  
  46. $query2 = &#092;"SELECT n_autor FROM k_autorzy WHERE 1\";
  47. for ($i = 0; $i < $count; $i++) {
  48.   $wiersz = mysql_fetch_array($result2);
  49.   $query2 .= &#092;" AND id_autora=\".$wiersz['id_autora']; 
  50. }
  51. $rekordy = mysql_query($query2, $con) or die (mysql_error());
  52.  
  53. $autorzy = '';
  54.  
  55. while ($record = mysql_fetch_array($rekordy)) {
  56.   $autorzy .= $record['n_autor'];
  57. } 
  58.  
  59. echo $autorzy;
  60.  
  61. print &#092;"<br>\";
  62. }
  63.  
  64. print &#092;"</body></html>\";
  65.  
  66.     CloseTable();
  67.  
  68. ?>


(IMG:http://forum.php.pl/style_emoticons/default/blink.gif)

Ten post edytował qtchb 25.08.2004, 11:12:50
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 18:34