Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][PHP] Inner join kilka tabel, Pobieranie danych z róznych pól i tabel
Denix
post 21.05.2013, 10:47:21
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.05.2013
Skąd: Tychy

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


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.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
CuteOne
post 21.05.2013, 10:58:02
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


wrzuć to zapytanie w phpmyadmin i sprawdź co zwróci
Go to the top of the page
+Quote Post
Denix
post 21.05.2013, 11:48:31
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.05.2013
Skąd: Tychy

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


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).
Go to the top of the page
+Quote Post
morthan
post 21.05.2013, 12:04:33
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.06.2010

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


Gdzieś brak ci dancyh.
Poczytaj czym się różni INNER od LEFT, a odpowiedź przyjdzie sama.
Go to the top of the page
+Quote Post
CuteOne
post 21.05.2013, 12:08:00
Post #5





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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
Go to the top of the page
+Quote Post
Denix
post 22.05.2013, 08:31:26
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.05.2013
Skąd: Tychy

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


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

Ten post edytował Denix 22.05.2013, 08:52:34
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:25