Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Mysql] Nietypowy przypadek, pole odczytywane dwa
seeb
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

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


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ę.

Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
seeb
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
seeb
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

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


  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)
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Nigdzie tu nie widzę left join na pracodawcę.

Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
seeb
post
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

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


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!

Ten post edytował seeb 21.02.2012, 14:48:27
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
seeb
post
Post #9





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

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


poeksperymentuję ale już widzę, że SELECT * musi wylecieć (IMG:style_emoticons/default/smile.gif)

Mam cały zestaw zdublowanych danych.


Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 00:52