Wydaje mi się, że powinno się udać z zapytaniem: (sprawdź poprawnośc składni, na wszelki wypadek, nazwy tabel i pól):
select * from własciwosci_materialu,wlasciwosci,rodzaje_wlasciwosci
where własciwosci_materialu.id_wlasciwosci=wlasciwosci.id_wlasciwosci
and wlasciwosci.id_rodzaj_wlasciwosci=rodzaje_wlasciwosci.id_rodz_wlasciwosci
and wlasciwosci_materialu.id_materialu= :id_materialu
order by rodzaje_wlasciwosci.nazw_wlasciwosci, wlasciwosci.nazwa_wlasciwosci ASC
To zapytanei powinno ci dac co potzrebuejsz za jednym zamachem, klauzula order by służy do posegregowania po kolumnachm, najpierw rodzaj a potem konkretne (ale jujz tylko tego rodzaju). W select dałem * ale wpisz co ci potrzebne, przy czym zawsze musisz mieć to co wypisane w order by czyli rodzaje_wlasciwosci.nazw_wlasciwosci, wlasciwosci.nazwa_wlasciwosci .
zapytanie powinno zwrocic cos w rodzaju:
Fizyczne , gestosc
Fizyczne , objetosc molowa
Termiczne , cieplo parowania
Termicze , cieplo topnienia
bedziesz musial zapytanie zdejmowac po kolei, czyli w 1 kroku odczytac rodzaj wpisac go (Fizyczne), a potem wypisac wlasciwosc (gestosc), a w nastepnym kroku (wierszu) sprawdzic czy zmienil sie rodzaj (fizyczne - nie zmeinil), i jesli sie nie zmienil to dodac tylko wlasciwosc (objetosc molowa). Następny wiersz czy się zmienil rodzaj (Termiczne-tak) wpisac najpierw nowy rodzaj, a potem wlasciwosc (cieplo parowania). Następny wiersz, czy sięzmienil rodzaj - nie, wiec tylko nowa wlasciwosc (cieplo topnienia) itd itd az sie skoncza wiersze.
Dokładnie sprawdz mój sql mogą być będy w pisowni, ale sens powinien być ok.
Wiem że masz braki w wiedzy, ale sposób w jaki kombinowałeś mi się spodobał, a jak się douczysz SQLa będziesz potrafił wiele więcej robić. Myśle że poradzisz sobie już tym problemem nawet jakbyć miał jakieś przeróbki robić.