Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 10 Dołączył: 13.03.2014 Skąd: Bydgoszcz Ostrzeżenie: (0%)
|
Cześć!
Kod:
Niestety nie zwraca on ID użytkownika, całą reszte już tak. ID na pewno jest. Przy samym select'cie bez left join'a wszystko jest ok. Wiecie o co chodzi? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%)
|
Problemem jest tu... *.
Przy * zwracane są wszystkie kolumny ze wszystkich tabel. W MySQL w kolejności występowania we FROM. Czyli dla ciebie będzie to: e.id, e..., ... c.id, c...., ... en.id, en... A PDO nazywa te kolumny tak jak ma. Czyli nazywa je: id (z e), employee_id (z c), id (z c) - upss, nie mogę, bo już mam id. A potem wstawia pobrane wartości do odpowiednich kolumn. W kolejności występowania. Więc do id w efekcie wyląduje ci id z OSTATNIEJ tabeli. A jeśli jest ona dowiązana LEFT JOINem, to może się zdarzyć, że jest NULL, więc nie ma wartości. A widzę, że nie skorzystałeś z rady i wolałeś użyć 4 zmiennej zamiast prostego IN ... Mam na myśli "(c.number = :variable1 OR e.firstname = :variable2 OR e.lastname = :variable3 OR c.card_id = :variable4)" |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 10 Dołączył: 13.03.2014 Skąd: Bydgoszcz Ostrzeżenie: (0%)
|
Problemem jest tu... *. Przy * zwracane są wszystkie kolumny ze wszystkich tabel. W MySQL w kolejności występowania we FROM. Czyli dla ciebie będzie to: e.id, e..., ... c.id, c...., ... en.id, en... A PDO nazywa te kolumny tak jak ma. Czyli nazywa je: id (z e), employee_id (z c), id (z c) - upss, nie mogę, bo już mam id. A potem wstawia pobrane wartości do odpowiednich kolumn. W kolejności występowania. Więc do id w efekcie wyląduje ci id z OSTATNIEJ tabeli. A jeśli jest ona dowiązana LEFT JOINem, to może się zdarzyć, że jest NULL, więc nie ma wartości. A widzę, że nie skorzystałeś z rady i wolałeś użyć 4 zmiennej zamiast prostego IN ... Mam na myśli "(c.number = :variable1 OR e.firstname = :variable2 OR e.lastname = :variable3 OR c.card_id = :variable4)" Nie zmieniłem bo dopiero dziś zerknąłem na ten temat. Co do tego co napisąłeś apropo zapytania. Jak może nadpisywać wartością z innej tabelki skoro nie ma pasujących pól a co za tym idzie nie ma czym napisać bo tabelka którą chce dołaczyć nie ma odpowiednich pól (w sensie żadne nie zgadza się z polem które jest podane w łączeniu)? Ten post edytował NickOver 2.03.2015, 14:16:30 |
|
|
|
Post
#5
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
ON e.employee_id = c.employee_id
Jesli twoje ID kryje sie polem employee_id to wlasnie masz to pole w dwoch roznych tabelach i ostatnia tabela nadpisuje wynik pierwszej. |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 10 Dołączył: 13.03.2014 Skąd: Bydgoszcz Ostrzeżenie: (0%)
|
No tak, to rozumiem. Ale czemu tak się dzieje skoro warunek złączenia jest nieprawidłowy?
|
|
|
|
Post
#7
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Ale jest.. bazy nie interesuje czy jest prawidlowy czy nie. Jak nie jest prawidlowy, to wowczas pod kolumną bedziesz mial NULL. ALe bedziesz mial. I ta wlasnie kolumna nadpisze wczesniejszą kolumne
|
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 13:49 |