![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuję w swojej aplikacji stworzyć macierz 10x10 wypełnioną typami użytkowników w wybranej kolejce. Przy pozycjach bez typów wstawić znak "-" .
Mam następującą strukturę bazy danych: tabela USER, tabela TYPE, ; join z MEET i USER tabela MEET, ; join z MATCHDAY tabela MATCHDAY Co po kolei robię: 1. Pobranie typów użytkowników (jest 10 użytkowników) z wybranej kolejki. 2. Pobranie listy 10 meczy w wybranej kolejki 3. Połączenie za pomocą pętli meczy z typami użytkowników Zapytanie jakie mam:
Złączenie listy meczy z listą typów:
Niestety powyższe w przypadku typu 7 użytkowników zwraca mi 73 rekordy (3 NULL = 3 userom którzy nie typowali) dla 1 kolejki i również 73 typy (z matchday_id = NULL) dla kolejki 2 itd. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 859 Pomógł: 177 Dołączył: 29.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Mam taką strukturę bazy danych:
tabela USER (pole: status) tabela TYPE (klucze obce: meet_id , user_id) tabela MEET (jako mecz) (pole: matchday) Użytkowników ze statusem = 1 mam 10. Meczy (MEET) ze statusem matchday = 1 też jest 10. Jak zrobić zapytanie aby otrzymać macierz 10x10 a więc 100 rekordów z powyższego ? Chodzi o to że w tabeli TYPE może nie być rekordów wiążących USER z TYPE i TYPE z MEET. PS. Dodam tylko że w całości chodzi o to że użytkownicy typują wyniki meczy i ci co nie wytypują chciałbym aby SQL podał mi w tych miejscach NULL . Zawsze chcę mieć 100 rekordów bo 10 użytkowników i 10 meczy. Poniższe zapytanie niestety się nie sprawdza bo zwraca mi 73 rekordy gdy 3 użytkowników nie wytypuje:
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
A czemu sie uparles, ze to zapytanie ma ci zwrocic macierz?
Z tego co zrozumialem to masz wyswietlic macierz, tak? To machnij w wierwszach userow, w kolumnach mecze, czy tam na odwrot jak tam sobie chcesz. Teraz pobierz sobie poprostu z bazy kto co wytypowal, Jak to bedzie 70 to dobrze, jak to bedzie 32 tez dobrze. No i teraz sobei lecisz w php po macierzy i patrzych czy dla pary user-mecz masz dane czy nie .Jak nie masz to wstawiasz NIC, jak masz to wstawiasz w komorke co tam chcesz wstawic. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
no w sumie to co chcę zrobić to jest tam jakaś macierz
Mówisz machnąć userów i mecze ... rozumiem że pobierać je w osobnych zapytaniach ? Tylko że wtedy będę miał aż 3 zapytania do bazy czego chciałem uniknąć bo i tak mam już 2 zapytania (jedno do typów i jedno do meczy). Chyba że miałbym to trzymać po pobraniu w CACHE i odpytywać CACHE - myślę jednak że przy tak niewielkiej ilości to nie ma takiej potrzeby. 3 dodatkowe zapytania do bazy przy innych które jednocześnie na stronie robią już inne rzeczy. Rozumiem nospor że nie powinienem się tym przejomować i to nie jest złe podejście ? Spoko chcę skorzystać z podopowiedzi doświadczonych programistów. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Widać że nie zrozumiałeś....
W PHP utwórz sobie macież 10x10. Zajmie to 0.01s. Pobierz rekordy tak jak to robisz. W pętli wpisz sobie te rekordy do odpowiedniego miejsca i tyle... Co w tym skomplikowanego? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Mówiąc "macierz" rozumiem mówimy o tablicy wielowymiarowej (tutaj dwuwymiarowej) a wiec takiej:
$types[1][1] = "1-1"; $types[1][2] = NULL; $types[1][3] = "1-1"; $types[1][4] = "1-1"; ... $types[10][7] = "1-1"; $types[10][8] = NULL; $types[10][9] = NULL; $types[10][10] = "1-1"; Dokładnie powyższe chciałbym uzyskać (klucze wiersze ID meczu a klucze kolumny ID uzytkownika). Tylko właśnie nadal nie rozumiem jak miałbym wypełnić klucze tablicy IDkami meczów i użytkowników ? Użytkowników w bazie jest więcej niż 10 ale chcę pobrać tylko tych ze statusem 1 (10sztuk) Meczy też jest więcej ale chcę pobrać tylko te które mają matchday = 1 (10 sztuk) Rozumiem że z tego jednego zapytania muszę wydobyć i przypisać od razu ID meczy i użytkowników ? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Ja coś takiego zrobiłem używają klasy roundrobin.
Klasa trochę przestarzała, ale spełnia swoje założenia, także do dalszej pracy. https://www.phpclasses.org/package/5563-PHP...tml#information |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
A co ma piernik do wiatraka?
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Mówisz machnąć userów i mecze ... rozumiem że pobierać je w osobnych zapytaniach ? Jesli sie boisz ty dwoch dodatkowych prostych zapytan, to userow masz przeciez w swoim zapytaniu, wiec juz masz o jedno mniej ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
A ja z ciekawości zapytam: co przechowuje tabela MATCHDAY?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ehh ... pobrałem sobie w osobnych zapytaniach IDki userów i mecze .
Ustawiłem je tak jako klucze:
lista typów pobrana z bazy jest taka:
Rozumiem że mogę ją teraz wypełnić tylko za pomocą aż trzech pętli foreach ?
Może to tak wyglądać finalnie ? Ten post edytował damianooo 10.01.2018, 22:07:04 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
A czemu 3?
Mając już wygenerowaną macież iterujesz tylko po tablicy na podstawie której chcesz wprowadzić dane podając jako indeksy wybrane wartości... |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 11:03 |