Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Mysql] Nietypowy przypadek
Forum PHP.pl > Forum > Bazy danych > MySQL
seeb
Postaram się wyjaśnić jak najlepiej potrafię.

  1. tabela1: sys_ptp
  2. lp pracodawca id
  3. 1 30 32
  4. 2 30 33
  5. 3 2 38
  6. 4 59 55
  7.  
  8. tabela 2:sys_users [gid 14 pracownik, gid 15 firma]
  9. id imie_nazwisko email gid
  10. 30 Spółka fikcyjna z o.o. spolkafikcyjna@costam.pl 15
  11. 32 Agnieszka Fikcyjna afikcyjna@onet.pl 14
  12. 33 Ryszarda Fikcyjna ryszardaf@onet.pl 14
  13. 38 Zdzisław Fikcyjny Fzdzichu@onet.pl 14
  14. 55 Zdzisław Przesieka przesieka@onet.pl 14
  15.  
  16. Tabela 3:sys_pracownicy_dane
  17. id nr_szafki nr_kartoteki numer_klucza_zapasowego
  18. 32 11 1890 339887
  19. 33 12 1891 743689
  20. 38 45 1271 129887
  21. 55 90 0946 877639


z tego wszystkiego potrzebuję uzyskać linijkę którą niestety nie wiem jak wyciągnąć (z użyciem tablic w PHP już to zrobiłem tyle, że jest to mało wydajny sposób a wolałbym użyć sql i uzyskać całość jednym zapytaniem choćby dość skomplikowanym).

  1. imie_nazwisko[tu akurat firma] id imie_nazwisko email
  2. Spółka fikcyjna z o.o. 32 Agnieszka Fikcyjna afikcyjna@onet.pl 1890
  3. Spółka fikcyjna z o.o. 33 Ryszarda Fikcyjna ryszardaf@onet.pl 1891



Ma ktoś pomysł na to bo siedze od rana i nic wymyśleć nie mogę.

nospor
Czyli co chcesz zrobic? Majać ID chcesz pobrać nazwę z innej tabeli?
No to zwykły LEFT JOIN - w manualu masz przykłady na to
seeb
No właśnie nie zwykłe LEFT JOIN


w jednej i tej samej tabeli mam i pracownika i pracodawce

pracodawca ma id 30 a pracownik 32 i 33

z 2 innych tabel pobieram resztę danych pracownika a do wiersza dołączam nazwę pracodawcy.


zatem najpierw łączymy pracowników z pozostałymi danymi z 2 innych tabel a na koniec z pierwszej tabeli dobieramy jeszcze nazwe pracodawcy

ze zwykłego left join dostaję coś takiego
Kod
lp     pracodawca            id     imie_nazwisko                 email         gid
1           30               32     Agnieszka Fikcyjna afikcyjna@onet.pl        14

a chciałbym
Kod
lp     pracodawca            id     imie_nazwisko                 email      gid
1  Spółka fikcyjna z o.o.    32     Agnieszka Fikcyjna afikcyjna@onet.pl     14


Możesz porównać to z tabelami z góry.
Z góry dziekuję za pomoc bo już mi pomysłów brak.
nospor
No to nadal LEFT JOIN. Nadal zwykły LEFT JOIN
Jeden LEFT JOIN na pracodawce, a drugi LEFT JOIN na pracownika.

W zapytaniu można dać i milion razy LEFT JOIN
seeb
  1. SELECT *
  2. FROM sys_ptp ptp
  3. LEFT JOIN sys_users u ON ptp.id = u.id
  4. LEFT JOIN sys_pracownicy_dane p ON u.id=p.id


tu otrzymuję fajny wynik ale juz wyciągnąć nazwę pracodawcy z tego jest mi ciężko bo dostaję bzdury (czyli ten pierwszy z liczbami zamiast nazwy)
nospor
Nigdzie tu nie widzę left join na pracodawcę.

seeb
i słusznie bo nie ma gdyż ciężko jest połączyć u.id z u.id bo tak by to musiało być z left join

sys_users zawiera nazwisko pracownika i nazwę pracodawcy rozróżniam ich po gid i id

gid mówi, że to pacodawca (gid 15) a id np 30 mówi nam jaka jest nazwa pracodawcy

u.id = 30 to pracodawca
u.id = 32 to pracownik

są w tej samej tabeli!
nospor
Przeciez pracodawca to pole pracodawca a nie zadne id

  1. SELECT *
  2. FROM sys_ptp ptp
  3. LEFT JOIN sys_users u ON ptp.id = u.id
  4. LEFT JOIN sys_users up ON ptp.pracodawca = up.id
  5. LEFT JOIN sys_pracownicy_dane p ON u.id=p.id
seeb
poeksperymentuję ale już widzę, że SELECT * musi wylecieć smile.gif

Mam cały zestaw zdublowanych danych.


nospor
Tak, logiczne ze dla * będą duplikaty. Musisz używać aliasów a dane które się duplikują wypisać osobiście i dodać dla nich alias

edit: i nie duplikaty a będą nadpisywane kolumny
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.