Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Wyciągnięcie paru rekordów w jednym
Forum PHP.pl > Forum > Przedszkole
SzymonNegle
Mam bazę pracownikow którzy obslugują parę miejscowośi. np. Jan Nowak obsługuje Poznań, Warszawe i Białystok i nie umiem tego pokazac:( Mam taką bazę:

  1. CREATE TABLE PRACOWNIK(
  2. IDPracownika int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. Nazwachar(500) NOT NULL
  4. );
  5. CREATE TABLE MIASTA(
  6. IDMiasta int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  7. NazwaMiasta char(50) NOT NULL
  8. );
  9. CREATE TABLE MIASTO_PRACOWNIK (
  10. IDMia_Pra int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  11. MPmiasto int NOT NULL,
  12. MPpracownik int NOT NULL
  13. );


w tabeli MIASTO_PRACOWNIK przechowuje połączenia między pracwonikiem a miastem. Aby to wyświetlic zrobiłem coś takiego:

  1. <?php
  2. $result=@mysql_query("SELECT NazwaPracownika FROM PRACOWNIK ");
  3.  
  4. while ($row = mysql_fetch_array($result)) {
  5.  
  6. echo '<td width="100">' .$row['NazwaPracownika'] . ' </td> ';
  7.  
  8. echo '<td>';
  9. $result_pra=@mysql_query("SELECT MIASTA.NazwaMiasta AS NazwaMiasta FROM MIASTA,  MIASTO_PRACOWNIK WHERE MIASTA.IDMiasta=MIASTO_PRACOWNIK.MPmiasto AND MIASTO_PRACOWNIK.P_Pracownik=3");
  10. while ($row1 = mysql_fetch_array($result_pra)) {
  11. echo ''.row1['NazwaMiasta']).''; 
  12. }
  13. echo '</td>';
  14.  
  15. }
  16. ?>


Każde z zapytań osobno pokazuje wzystko razem. Ale jak chce to połączyc zeby pokazywalo razem to nawet sie nie odpala strona:( A może tam trzeba zrobic jakieś podzapytanie. 

Umiał by to ktoś rozwiązac??
skowron-line
@SzymonNegle wywal @ sprzed query i daj sobie echo mysql_error(); i bedziesz wiedział jak błąd się pokaże.
SzymonNegle
Dzięki skowron-line. Niestety nic niechce sie ukazac, strona w ogóle niechce sie załadowac, nawet jak zrobie tak jak napisałeś. Natomiast jeśli zakomentuje

//echo ''.row1['NazwaMiasta']).''; 

To i sie wyświetla, ale bez tych miast sad.gif 
kefirek
Zobacz tak

  1. <?php
  2. $wynik = mysql_query("SELECT pm.*, m.*, p.* FROM MIASTO_PRACOWNIK pm
  3. LEFT JOIN MIASTA m ON pm.MPmiasto=m.IDMiasta
  4. LEFT JOIN PRACOWNIK p ON pm.IDPracownika=p.MPpracownik");
  5. while($r = mysql_fetch_assoc($wynik)) {
  6. echo "Nazwa pracownika ".$r['Nazwa']." Miasto ".$r['NazwaMiasta']."";  
  7. }
  8. ?>
SzamanGN
Nie jestem pewien czy to zadziała, ale możesz sprawdzić:

  1. <?php
  2. $result=@mysql_query("SELECT IDPracownika, NazwaPracownika FROM PRACOWNIK");
  3. while ($row = mysql_fetch_array($result))
  4.  {
  5.  echo '<td width="100">'.$row['NazwaPracownika'].'</td>';
  6.  echo '<td>';
  7.  $result_pra=@mysql_query('SELECT MIASTA.NazwaMiasta AS NazwaMiasta FROM MIASTA, MIASTO_PRACOWNIK WHERE MIASTA.IDMiasta=MIASTO_PRACOWNIK.MPmiasto AND MIASTO_PRACOWNIK.MPpracownik='.$row['IDPracownika']);
  8.  while ($row1 = mysql_fetch_array($result_pra))
  9.   {
  10.   echo row1['NazwaMiasta']).'<br>';
  11.   }
  12.  echo '</td>';
  13.  }
  14. ?>





W twoim kodzie PHP w linii 11 masz chyba błąd P_Pracownik powinno być MPpracownik
skowron-line
Cytat(SzymonNegle @ 28.12.2008, 11:56:55 ) *
Dzięki skowron-line. Niestety nic niechce sie ukazac, strona w ogóle niechce sie załadowac, nawet jak zrobie tak jak napisałeś. Natomiast jeśli zakomentuje

//echo ''.row1['NazwaMiasta']).''; 

To i sie wyświetla, ale bez tych miast sad.gif 


a ten nawias to od czego to jest questionmark.gif Jeżeli pracujesz na serwerze produkcyjnym to on generuje błąd bo sprawidziłem że nie ma otwarcia a błąd się nie wyświetla bo spada do logów.
SzymonNegle
Wielkie dzieki chłopaki!! Zrobiłem i dziala:) Jakby ktoś potrzebowal takiego rozwiązania to zapodaje kod:

  1. <?php
  2. $result=@mysql_query("SELECT IDPracownika, Nazwa FROM PRACOWNIK");
  3. while ($row = mysql_fetch_array($result))
  4.  {
  5.  echo '<td width="100"><b>'.$row['Nazwa'].'</b> <br></td>';
  6.  echo '<td>';
  7.  $IDpra = $row['IDPracownika'];
  8.  echo '<br>Zmianna pracownika ta z row ='.$row['IDPracownika'].'<br> natomiast zmienna z solarem równa sie '.$IDpra.'';
  9.  $result_pra=@mysql_query("SELECT MIASTA.NazwaMiasta AS NazwaMiasta 
  10.                            FROM  MIASTA, MIASTO_PRACOWNIK 
  11.                         WHERE MIASTA.IDMiasta=MIASTO_PRACOWNIK.MPmiasto 
  12.                               AND MIASTO_PRACOWNIK.MPpracownik=$IDpra");
  13. while ($row1 = mysql_fetch_array($result_pra))
  14.  {
  15.  echo '<td width="100"><br> - '.$row1['NazwaMiasta'].'<br></td>';
  16.  echo '<td>';
  17. }
  18.  echo '<br><br></td>';
  19. ?>


Wszytko ładnie śmiga i jest wynik taki jaki chciałem. Linie 9 dałem dla wyjaśnienia(mi takie wyświetlanie dużo pomaga więc go nie usuwalem, może nie jest to prof, ale mi jest lepiej to skumac:) ).

Jeszcze raz wielkie dzięki za pomoc!!



A może dalej pomożecie? Jak wyciągnąc wszystkich pracowników obslugujących np miasto Poznań? Dla ułatwienia podaje wypełnioną bazę:

  1. CREATE TABLE PRACOWNIK(
  2. IDPracownika int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. Nazwa char(500) NOT NULL
  4. );
  5. CREATE TABLE MIASTA(
  6. IDMiasta int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  7. NazwaMiasta char(50) NOT NULL
  8. );
  9. CREATE TABLE MIASTO_PRACOWNIK (
  10. IDMia_Pra int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  11. MPpracownik int NOT NULL,
  12. MPmiasto int NOT NULL
  13. );
  14. INSERT INTO PRACOWNIK VALUES 
  15.   ('','Kowalski');
  16. INSERT INTO PRACOWNIK VALUES 
  17.   ('','Nowak');
  18. INSERT INTO MIASTA VALUES 
  19.   ('','Poznan');
  20. INSERT INTO MIASTA VALUES 
  21.   ('','Warszawa');
  22. INSERT INTO MIASTA VALUES 
  23.   ('','Katowice');
  24. INSERT INTO MIASTA VALUES 
  25.   ('','Łódź');
  26. INSERT INTO MIASTO_PRACOWNIK VALUES 
  27.   ('','1','1');
  28. INSERT INTO MIASTO_PRACOWNIK VALUES 
  29.   ('','1','2');
  30. INSERT INTO MIASTO_PRACOWNIK VALUES 
  31.   ('','1','3');
  32. INSERT INTO MIASTO_PRACOWNIK VALUES 
  33.   ('','2','1');
  34. INSERT INTO MIASTO_PRACOWNIK VALUES 
  35.   ('','2','3');
  36. INSERT INTO MIASTO_PRACOWNIK VALUES 
  37.   ('','2','4');


Podpowie ktośquestionmark.gif smile.gif 
kefirek
Cytat(SzymonNegle @ 28.12.2008, 16:37:07 ) *
A może dalej pomożecie? Jak wyciągnąc wszystkich pracowników obslugujących np miasto Poznań? Dla ułatwienia podaje wypełnioną bazę:


  1. SELECT u.*, p.* FROM MIASTO_PRACOWNIK p LEFT JOIN PRACOWNIK u ON p.MPpracownik=u.IDPracownika WHERE MPmiasto='1';
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.