Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Pobieranie danych z 2 baz i wyświetlanie ich w pętli php
Forum PHP.pl > Forum > Przedszkole
Mast3rdgs
Witam.

Stworzyłem 2 bazy danych gdzie w 1 trzymam dane dotyczące fizycznych właściwości przedmiotu potrzebne do wyszukiwarki a w 2 bazie danych opisy tegoż przedmiotu.

Baza danych 1 zawiera 1 tabelę nazwijmy ją wlasciwosciprzedmiotu i posiada wartości : wartosc1, wartosc2, wartosc3, wartosc4, wartosc5 potrzebne do wyszukiwarki (inny plik)

Baza danych 2 zawiera 3 tabele
Tabela 1 - opis fabryki produkującej ten przedmiot - z wartościami : uid - fid oraz opis - ofpl
Tabela 2 - opis właściwości przedmiotu z wartościami : numer ewidencyjny - mmid, skład materiałowy - mmpl
Tabela 3 - opis dodatków dla danego przedmiotu z wartościami : numer ewidencyjny pcid, zawartość - pcpl

Teraz chciałbym utworzyć plik php który wyświetlałby wszystkie dane z bazy danych numer 1 wraz z opisami z bazy danych numer 2 i tabel w nich zawartych. W bazie danych nr1 zawarte są numery ewidencyjne opisów danego przedmiotu dla odpowiednich tabel z bazy danych 2.

Wyświetlanie zawartości odbywa się poprzez pętle w php. Chciałbym aby opisy ładowały się do danego przedmiotu zgodnie z numerem ewidencyjnym przypisanych opisów do niego. Dzięki temu mając bazę danych o zawartości xxx.xxx wpisów nie muszę wpisywać opisów do każdego przedmiotu tylko podaję 3 numery ewidencyjne opisu.

Proszę o pomoc w tym problemie gdyż skrypt, który stworzyłem nie działa. Jestem początkującym webmasterem w kwestii obsługi baz danych i plików php.

Skrypt : na pewno jest zły gdyż pogubiłem się już w nim sam
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <head>
  4. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  5. </head>
  6. <body>
  7. <table border="1" cellspacing="2" cellpadding="2">
  8. <tr>
  9. <td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif"><b>Tabela 1<b></font></td>
  10. <td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">Tabela 2</font></td>
  11. <td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">Tabela 3</font></td>
  12. <td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">Tabela 4</font></td>
  13. <td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">Tabela 5</font></td>
  14. <td
  15. <td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">Tabela 6</font></td>
  16. <td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">Tabela 7</font></td>
  17. </tr>
  18.  
  19. <?php
  20. $uzytkownik="uzytkownik1";
  21. $haslo="haslo1";
  22. $uzytkownik2="uzytkownik2";
  23. $haslo2="haslo2";
  24.  
  25. error_reporting(E_ALL ^ E_NOTICE);
  26.  
  27. $polaczenie2 = new mysqli('sql.second.vdl.pl', $uzytkownik2, $haslo2, 'bazadanych2');
  28.  
  29. if (mysqli_connect_errno() != 0){
  30. echo '<p>Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
  31. }
  32.  
  33. else {
  34. $polaczenie = new mysqli('sql.second.vdl.pl', $uzytkownik, $haslo, 'bazadanych1');
  35. if (mysqli_connect_errno() != 0){
  36. echo '<p>Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
  37. }
  38. else {
  39.  
  40. $wynik = @$polaczenie -> query("SELECT * FROM wlasciwosciprzedmiotu ORDER BY kp ASC, kpl ASC, rp ASC, kal ASC, kalx ASC, mp ASC, seria ASC, seria2 ASC, g3 ASC");
  41. if ($wynik === false){
  42. printf("Errormessage: %s\n", mysqli_error($polaczenie));
  43. $polaczenie -> close();
  44. }
  45. $mmid = @$polaczenie2 -> query
  46. $opis_tabela2 = @$polaczenie2 -> query("SELECT '$mmid' FROM tabela2");
  47. if ($opis_tabela2 === false){
  48. printf("Errormessage: %s\n", mysqli_error($polaczenie2));
  49. $polaczenie2 -> close();
  50. }
  51. $opis_tabela1 = @$polaczenie2 -> query("SELECT * FROM tabela1 WHERE FID='$fid'");
  52. if ($opis_tabela1 === false){
  53. printf("Errormessage: %s\n", mysqli_error($polaczenie2));
  54. $polaczenie2 -> close();
  55. }
  56. $opis_tabela3 = @$polaczenie2 -> query("SELECT * FROM tabela3 WHERE PCID='$pcid'");
  57. if ($opis_tabela3 === false){
  58. printf("Errormessage: %s\n", mysqli_error($polaczenie2));
  59. $polaczenie2 -> close();
  60. }
  61. else {
  62. while (($dane2 = $opis_tabela2 -> fetch_assoc()) !== null){
  63. $mmid=$dane2['mmid'];
  64. }
  65. while (($dane2 = $opis_tabela1 -> fetch_assoc()) !== null){
  66. $fid=$dane2['fid'];
  67. }
  68. while (($dane2 = $opis_tabela3 -> fetch_assoc()) !== null){
  69. $pid=$dane2['pcid'];
  70. }
  71. while (($dane = $wynik -> fetch_assoc()) !== null){
  72.  
  73. echo'<tr>';
  74. echo'<td align="center" valign="middle"><font size="6" face="Arial, Helvetica, sans-serif"><b>
  75. ' . $dane['kp'] . '' . $dane['kp2'] . '
  76. <b></font></td>';
  77. echo'<td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">
  78. ' . $dane['mp'] . '' . $dane['rp'] . '<br>Seria ' . $dane['seria'] . '' . $dane['seria2'] . '
  79. </font></td>';
  80. echo'<td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">
  81. ' . $dane['kal'] . 'x' . $dane['kalx'] . '
  82. </font></td>';
  83. echo'<td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">
  84. ' . $opis_tabela2['wartosc1'] . ' - ' . $opis_tabela2['wartosc2'] . '
  85. </font></td>';
  86. echo'<td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">
  87. ' . $opis_tabela1['wartosc1'] . '
  88. </font></td>';
  89. echo'<td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">
  90. ' . $opis_tabela1['wartosc2'] . '
  91. </font></td>';
  92. echo'<td align="center" valign="middle"><font face="Arial, Helvetica, sans-serif">
  93. Opis1 :' . $opis_tabela3['wartosc1'] . '-' . $opis_tabela3['wartosc3'] . ',<br>Opis2 :' . $opis_tabela1['wartosc1'] . ',<br> Opis3 : ' . $opis_tabela1['wartosc2'] . '.
  94. </font></td>';
  95. echo'<td align="center" valign="middle">
  96. ' . $dane['zdj'] . '
  97. </td>';
  98. echo'</tr>';
  99. }
  100. }
  101. }
  102.  
  103. }
  104.  
  105. echo "</table>";
  106. $wynik -> close();
  107. $polaczenie -> close();
  108. ?>
  109. </body>
  110. </html>
nospor
Czemu w ogole stworzyles dwie bazy danych?? Ma byc jedna baza danych z wieloma tabelami. Nie komplikuj sobie bez powodu życia
Mast3rdgs
Baza danych 1 planowo ma zawierać kilkadziesiąt tysięcy wpisów i służy jedynie do wyszukiwarki. Chciałbym aby nie była dodatkowo obciążona w późniejszym czasie tysiącami opisów

Da się wykonać skrypt obsługujący 2 bazy danych ? jeśli nie to poprosiłbym o pomoc przy obsłudze wielu tabel w jednej bazie
nospor
Nadal ma to byc wszystko w jednej bazie. Rozbijanie tego na dwie bazy jest bez sensu i wprowadza tylko same klopoty, zadnych korzysci
Mast3rdgs
Oki to zrobię w 1 bazie

Natomiast nadal pozostaje pytanie jak ułożyć skrypt który będzie wyświetlał opis z danej tabeli zgodnie z numerem ewidencyjnym podanym w właściwościach danego przedmiotu ?
nospor
tabele, ktore mają ze sobą cos wspolnego, łączysz normalnie przez LEFT JOIN - zajrzyj do manuala, tam masz to opisane.

ps: przenosze na przedszkole, bo patrzac na kod, jestes na tym jeszcze etapie
Mast3rdgs
Czyli jeśli użyje left join w tej linii:

$wynik = $polaczenie -> query("SELECT * FROM wlasciwosciprzedmiotu ORDER BY ... (tutaj sortowanie w pętli)
LEFT JOIN opisy1 ON wlasciwosciprzedmiotu.fid = opisy1.fid
LEFT JOIN opisy2 ON wlasciwosciprzedmiotu.pid = opisy2.pid
LEFT JOIN opisy3 ON wlasciwosciprzedmiotu.mmid = opisy3.mmid ")

i użyje pętli :
while (($dane = $wynik -> fetch_assoc()) !== null){
}

To opisy będą wyświetlały się także w pętli zgodnie z podanymi numerami ewidencyjnymi w tabeli wlasciwosciprzedmiotu Tak ?
nospor
Tak. Tylko spojrz na skladnie SELECT gdyz ORDER BY nie znaduje sie po FROM tylko na koncu

No i petla ma wygladac tak:
while (($dane = $wynik -> fetch_assoc())){
}
Mast3rdgs
Czyli skrypt powinien wyglądać następująco ? (to już gotowy skrypt z mojego pliku wraz z sortowaniem)

$wynik = @$polaczenie -> query("SELECT * FROM karabinowa
LEFT JOIN opisyfabryk ON karabinowa.fid = opisyfabryk.fid
LEFT JOIN pociski ON karabinowa.pid = pociski.pid
LEFT JOIN zawartoscmaterialowa ON karabinowa.mmid = zawartoscmaterialowa.mmid
ORDER BY kp ASC, kpl ASC, rp ASC, kal ASC, kalx ASC, mp ASC, seria ASC, seria2 ASC, g3 ASC");


Przepraszam, iż zadaje banalne pewnie pytania ale jak to mówią kto pyta nie błądzi a i na przyszłość będę wiedział.
nospor
Nom, cos w ten desen.

I wywal te wszystkie malpy @
I ogolnie przeczytaj ten temat
Temat: Jak poprawnie zada pytanie
to albo na forum nie bedziesz musial tak czesto zagladac, albo jesli juz zajrzysz to podasz od razu jakies konkrety a nie "nie dziala"
Mast3rdgs
Dzięki za pomoc szacunek smile.gif

I jeszcze raz przepraszam za banalne pytania. Oczywiście temat pomocy przeczytam jak najszybciej
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.