![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem, którego nie mogę rozgryźć. Mam 4 table: users, trainings, training_instance oraz training_instance_user. Table są powiązane tak:
Do każdego jednego treningu może należeć wiele jego instancji - Tabela trainings powiązana relacją 1:n z tabelą training_instance Każdy użytkownik może brać udział w dowolnej ilości treningów i do każdego treningu może należeć wielu użytkowników - Tabela trainings powiązana relacją n:m (wiele do wielu) z tabelą users za pomocą tabeli haszującej training_instance_user - Tabela users powiązana relacją n:m z tabelą trainings za pomocą tabeli haszującej training_instance_user Potrzebuję wypisać dane z tabel trainings oraz trainings_instance danego użytkownika kiedy jednocześnie spełnione są warunki: training_instance_user->status =1 training_instance_user->canceled = 0 training_instance->date_start <= NOW() Na razie robię to tak w kontrolerze przekazuję do widoku rekord z id użytkownika. W widoku z kolei pobieram trainings skojarzone z użytkownikiem, dzięki metodzie getInstance pobieram również skojarzoną training_instance i wyświetlam datę. Pytanie jak i gdzie dorzucić te dodatkowe warunki do zapytania ?
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
W kontrolerze
Lecz lepiej to zrobić w modelu typu masz model: Application_Model_DbTable_Users() oraz metode getUsersAndTrainsngs($idUser, $status, $canceled, $start); |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
W takiej formie, zwraca mi zero rekordów. Robiłem rzutowanie obiektu $this-user jak i $this-user-getCourses().
W wersji z dwoma joinami obiekt:$this-user zwraca tablicę z 55 rekordami czyli ok bo pobieramy jednego usera. Natomiast obiekt $this-user->getCourses() zwraca pustą tablicę i to jest problem. W wersji z jednym join obiekt $this-user->getCourses() zwraca tablicę z dwoma danymi i to jest ok. Natomiast obiekt $this-user zwraca tablicę z 36 danymi i to też jest ok.
W phpmyadmin jeśli wykonam takie zapytanie dostaje 44 rekordy
Ten post edytował amii 21.08.2012, 10:05:36 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Pamiętaj o tym, że gdy masz 1 rekord w users i 5 rekordów powiązanych z tabelą users to mysql zwróci tablicę 5 wartości, gdzie dane user`a nie będą zmienione natomiast wartości w drugiej tabeli będą się zmienić.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Może ktoś wyjaśnić dlaczego te dwa sposoby zwracają różną ilość rekordów ?
Sposób 1 w tym przypadku zwraca rekrody tak jak tego oczekuje i tak jak pokazuje phpmyadmin po przekopiowaniu zapytania:
Sposób 2 zwraca większą ilość rekordów w dodatku trzeba cudować ze złączeniami bo zend wymusza stosowanie kluczy obcych
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zobacz czy select w 2 sposobie wygląda tak samo jak w 1.
porównaj sobie czy takie same, jak nie to musisz dalej kombinować z join, where, order, itp... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 09:37 |