JOIN - poprawa zapytania, Po zmianie zapytania brak pewnych danych w wyniku |
JOIN - poprawa zapytania, Po zmianie zapytania brak pewnych danych w wyniku |
6.01.2018, 15:23:43
Post
#1
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) |
Witam,
Potrzebuję do poniższego SELECTa dodać dodatkowe złączenie:
Powyższy SELECT zwraca mi 73 rekordy gdzie 3 z nich dzięki złączeniu LEFT JOIN pokazują wartość NULL (co jest równoznaczne z tym że trzech użytkowników nie podało swoich typów) . Niestety po dodaniu nowego złączenia wyświetla mi tylko 70 rekordów bez tych 3 z NULLem , które bardzo potrzebuję w tym wypadku. Nowy SELECT:
PS. Tabela User jest połaczona po ID z tabelą TYPE a tabela TYPE jest połączona z tabelę MEET. Próbowałem z INNER JOIN , RIGHT JOIN i samym JOIN i niestety nie działa zauważyłem że powodem jest to że w klauzuli WHERE dodałem to: m.matchday_id = 1 to już pewnie zmienia wiele w zapytaniu niestety bo Ci z NULLem odpadają od razu jeśli w tabeli MEET pozycja matchday jest równa 1 . Ehh pewnie tego nie przeskoczę ... Ten post edytował damianooo 6.01.2018, 15:17:10 |
|
|
6.01.2018, 15:24:32
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
-------------------- |
|
|
6.01.2018, 16:41:44
Post
#3
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) |
lepiej ale dalej to nie to
niestety dla matchday = 2 wyświetla mi 73 rekordy z NULL a powinien 0 (zero) ponieważ nikt nie typował w kolejce drugiej , więc nie może tak być. zmieniłem na INNER JOIN to drugie złączenie ale teraz znowu dostaję 70 rekordów ... ehh ... mam tak :
Ten post edytował damianooo 6.01.2018, 18:04:27 |
|
|
7.01.2018, 06:56:11
Post
#4
|
|
Grupa: Zarejestrowani Postów: 129 Pomógł: 13 Dołączył: 29.03.2012 Ostrzeżenie: (0%) |
A sprubój dodać do tego watunek "or" dla kolumny z nullem
|
|
|
7.01.2018, 08:54:04
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Zdecyduj się co chcesz osiągnąć.
W przypadku match_day=1 chciałeś mieć 73 rekordy, aby wiedzieć 70 typujących i 3 nietypujących. Gdy podstawiasz match_day=2 otrzymujesz znów 73 rekordy, w tym 73 nietypujących. Chcesz mieć 0 dla match_day=2, to złącz poprzez INNER JOIN, ale w tym przypadku otrzymasz 70 dla match_day=1. -------------------- |
|
|
7.01.2018, 16:58:53
Post
#6
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) |
Sytuacja jest prosta - chcę aby po wybraniu w GUI aplikacji przez użytkownika wybranej kolejki pokazały się wszystkie typy użytkowników. Dodatkowo przy użytkownikach co nie wytypowali ma się pojawić jakiś znak więc muszę wiedzieć którzy to byli.
Wydaje się więc że sprawa prosta ale jak widać nie. Zastanawiam się czy mam dobrze zaprojektowaną bazę danych. Mam tak: tabela USER, tabela TYPE (typ) ; pola m.in.: meet_id tabela MEET(spotkanie/mecz) ; pola m.in: matchday_id tabela MATCHDAY (kolejka meczy) Być może tabelę TYPE też powinienem mieć złączoną z tabelą MATCHDAY i wtedy problem by zniknął ? ,Tylko wydawało mi się że pod względem optymalizacji/normalizacji bazy nie było sensu łączyć skoro z MATCHDAY jest już złączona tabela MEET. emillo91 , w którym miejscu ten OR ? Ten post edytował damianooo 7.01.2018, 16:59:29 |
|
|
7.01.2018, 17:16:48
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
No to skoro dla match_day=2 otrzymujesz 73 rekordy i wszystkie NULL, to masz dokładnie listę użytkowników, którzy nie wytypowali.
Przecież właśnie chcesz, a przynajmniej powinieneś chcieć taki wynik, bo napisałeś: Cytat Dodatkowo przy użytkownikach co nie wytypowali ma się pojawić jakiś znak więc muszę wiedzieć którzy to byli.
-------------------- |
|
|
7.01.2018, 20:01:58
Post
#8
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) |
Problem w tym że na GUI wyświetlane się tylko typy wybranej kolejki - a nie wszystkie.
Próbuję to przerobić dalej w PHP ale kłopot mam w pętli w której łączę listę meczy z listą typów bo za dużo wychodzi mi pól z "-" co oznacza brak typu. Jak nikt nie wytypował w danej kolejce to chcę aby przy każdym był znak "-" .
Obecnie zapytanie mam takie:
zwracam mi 73 dla matchday_id = 1 i 73 dla matchday_id = 2 Ten post edytował damianooo 7.01.2018, 20:03:58 |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 13:27 |