![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Tworzymy z kolegą prostą grę przeglądarkową. Niestety, w kwestii SQL jeszcze raczkujemy. Chcę stworzyć wyzwalacz, który po dodaniu rekordu do tabeli "games" tworzy tabelę o nazwie "game.ID.players", gdzie w miejscu ID ma pojawić się zawartość pola "id" z tabeli "games". I tu pojawia się problem: w jaki sposób to napisać, żeby nazwa nowej tabeli zawierała id nowego rekordu? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 246 Pomógł: 79 Dołączył: 25.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Pomysł tworzenia osobnej tabeli dla każdego użytkownika nie jest najlepszy, wszystko można trzymać w jednej tabeli. Nazwę tabeli możecie sobie stworzyć przy pomocy CONCAT() albo lepiej CONCAT_WS().
Jednak waszym problemem jest to, że stworzenie tabeli wymaga zatwierdzenia transakcji, co nie jest dozwolone w MySQL w funkcjach składowanych i wyzwalaczach. Czyli nie można tworzyć tabel w ten sposób. Cytat Restrictions for Stored Functions
The following additional statements or operations are not permitted within stored functions. They are permitted within stored procedures, except stored procedures that are invoked from within a stored function or trigger. (...)
Ten post edytował kartin 2.09.2015, 19:11:43 -------------------- Jeśli ten post pomógł to kliknij przycisk
![]() Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Tabela miałaby być tworzona dla każdej rozgrywki, a nie dla każdego gracza.
Jeśli dobrze rozumiem, nie da się stworzyć tabeli poprzez wyzwalacz. W takim razie, jeśli chcę, by dla każdej nowej rozgrywki była tworzona osobna tabela, muszę użyć skryptu php, tak? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 246 Pomógł: 79 Dołączył: 25.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Tak, trzeba tworzyć przez osobne zapytanie. Jednak cały czas jest to zły pomysł. Wystarczy stworzyć jedną tabelę gamePlayers i dodać w niej osobną kolumnę z ID rozgrywki.
-------------------- Jeśli ten post pomógł to kliknij przycisk
![]() Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc. W naszej grze gracze będą mogli brać udział w kilku meczach na raz i tabela, którą chcę tworzyć dla każdej rozgrywki ma zawierać listę slotów dla graczy oraz do zajętych slotów przypisanych graczy. Mógłbym to co prawda zrobić w jednej tabeli, lecz miałaby ona więcej kolumn i przy wyszukiwaniu danych dotyczących tylko jednej rozgrywki musiałbym przeszukiwać całą dużą tabelę, zamiast szukać danych w osobnej, mniejszej tabeli. W tym przypadku wydaje mi się to najbardziej optymalne i wygodne rozwiązanie.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 10 Dołączył: 17.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jedna tabela, ewentualnie kilka tabel z odpowiednimi relacjami. Powtarzanie danych w tabelach według Twojego pomysłu, kłóci się z założeniami relacyjnego modelu bazy danych.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę z listą graczy i tabelę z listą rozgrywek. Powinna je łączyć relacja wiele do wielu, lecz wtedy miałbym dodatkowo jedną, obszerną tabelę. W tabeli tej często muszę dokonywać zmian (jeśli gracz dołączy do rozgrywki lub ją opuści). Wyszukiwanie pojedyńczego rekordu w takiej tabeli byłoby niezbyt optymalne.
W przypadku tworzenia osobnej tabeli dla każdej rozgrywki, informacje wyszukuje zawsze w niezbyt obszernej tabeli. Poza tym, ze względu na to, że każda rozgrywka jest całkowicie niezależna od innych, tak samo mam zamiar dla każdej rozgrywki tworzyć tabelę z listą jednostek i budynków występujących w danej rozgrywce. Trzymanie ich w jednej tabeli byłoby niewygodne, szczególnie, że nie mam potrzeby porównywać danych z zupełnie różnych rozgrywek. Może i kłóci się to z założeniami relacyjnej bazy danych, lecz wydaje mi się znacznie rozsądniejsze. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 10 Dołączył: 17.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ile będziesz miał w tej tabeli wpisów? 10 tysięcy, 20 tysięcy czy może 100 tysięcy? Dla baz danych są to żadne ilości. Zrobisz jak uważasz, ja tylko wyraziłem swoją opinię. Co do wyzwalaczy to mogę tylko zasugerować, iż jak nie musisz ich używać to tego nie rób.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 10:00 |