Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP] Inner join kilka tabel
Forum PHP.pl > Forum > Przedszkole
Denix
Witam,

Otóż potrzebuje pobrać dane z kilku tabel z różnych pól. Dane mniej wiecej sa polaczone tzn. Device.type jest polaczony z Device_type.Id (i z Device_type musze pobrac jego nazwe i pozniej wyswietlic w PHP. Próbowałem to ogarnąć, trochę szukałem po internecie ale nie znalazłem tego czego poszukuje... SQL zwraca Pusty wynik :/... oto moje zapytanie:

  1. SELECT
  2. Device.Id,
  3. Device.ST,
  4. Device.type,
  5. Device.model,
  6. Device.SN,
  7. Device.owner,
  8. Device.arrived_date,
  9. Device.device_name,
  10. Device.section,
  11. Device.line,
  12. Device.note,
  13. Device.avaiable,
  14. Worker.id,
  15. Worker.name,
  16. Worker.surname,
  17. Section.Id,
  18. Section.section,
  19. Device_type.id,
  20. Device_type.device
  21.  
  22. FROM Device
  23. INNER JOIN Worker ON Device.owner=Worker.id
  24. INNER JOIN Section ON Device.section=Section.Id
  25. INNER JOIN Device_type ON Device.type=Device_type.id


Nie potrafię dojść czemu zwraca cały czas pusty wynik.. Proszę o pomoc.

CuteOne
wrzuć to zapytanie w phpmyadmin i sprawdź co zwróci
Denix
No właśnie też pod tym kątem sprawdzałem smile.gif. Wyświetla, że zapytanie jest poprawne i znaleziono 0 rekordów. A baza jest wypełniona przykładowymi rekordami. Jak bym rozbił te zapytanie na kilka innych to normalnie wyświetla dane ale to bezsens skoro da się to zrobić w jednym zapytaniu. W innym elemencie strony używałem inner join ale do 2 tabelek i działa. Szukając na google rozwiązań a w sumie przykładowych zapytań do kilku tabel stworzyłem na ich podstawie swoje, baza je przyjmuje ale nie zwraca danych mimo, że zapytanie sql jest poprawne(składnowo).
morthan
Gdzieś brak ci dancyh.
Poczytaj czym się różni INNER od LEFT, a odpowiedź przyjdzie sama.
CuteOne
Usuń z zapytania Worker i sprawdź co zwróci jeżeli nic to usuń jeszcze Section i ponownie sprawdź. Jak kolega wyżej wspomniał prawdopodobnie czegoś brakuje smile.gif
Denix
SPróbowałem użyć funkcji LEFT JOIN ... i nic... po usuwałem workera, sprawdzilem, pozniej kolejne i dalej nic... zarówno jak SQL w my adminie pokazuje ze zapytanie jest poprawne ale brak rekordow do wyswietlenia tak i PHP tak samo mi robi :S..


  1. $sql = "SELECT
  2. Device.Id,
  3. Device.ST,
  4. Device.type,
  5. Device.model,
  6. Device.SN,
  7. Device.owner,
  8. Device.arrived_date,
  9. Device.device_name,
  10. Device.section,
  11. Device.line,
  12. Device.note,
  13. Device.avaiable,
  14. Worker.id,
  15. Worker.name,
  16. Worker.surname,
  17. Section.Id,
  18. Section.section,
  19. Device_type.id,
  20. Device_type.device
  21.  
  22. FROM Device
  23. LEFT JOIN Worker ON Device.owner=Worker.id
  24. LEFT JOIN Section ON Device.section=Section.Id
  25. LEFT JOIN Device_type ON Device.type=Device_type.id ";
  26.  
  27. $result = $db->query($query);
  28. $count = $result->num_rows;
  29. echo $count.' records';
  30. for($i=0; $i < $count; $i++)
  31. {
  32. $row = $result->fetch_assoc();
  33. if($row['avaiable']==1) $ava = '<b style="color: green;">Avaiable</b>';
  34. else $ava = '<b style="color: red;">Unavaiable</b>';
  35.  
  36. echo '
  37.  
  38. <tr style="font-size: 10px;">
  39.  
  40. <td>'.$row['ST'].'</a> </td><td>'.$row['type'].' </td> <td> '.$row['model'].' </td> <td> '.$row['SN'].' </td>
  41. <td> '.$row['owner'].' </td> <td> '.$row['arrived_date'].' </td>
  42. <td> '.$row['device_name'].' </td> <td> '.$row['section'].' </td> <td> '.$row['line'].' </td>
  43. <td> '.$ava.' </td> <td> <a href="index.php?id=pa&p=devices&act=edit-form&sid='.$row['Id'].'"> Edit </a> || <a href="index.php?id=pa&p=devices&act=delete&sid='.$row['Id'].'"> Delete </a> </td>
  44. </tr>
  45. ';
  46.  
  47. }


Edited
Do zamknięcia... SQL po restarcie hula, a ja z robiłem błąd w składni php tongue.gif złych zmiennych uzyłem.

  1. $resuts = $db->query($sql);


Tak byc powinno
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.