Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyzwalacz tworzący tabelę
juna8001
post
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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
kartin
post
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. (...)
  • Statements that perform explicit or implicit commit or rollback. (...)


Ten post edytował kartin 2.09.2015, 19:11:43


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
juna8001
post
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?
Go to the top of the page
+Quote Post
kartin
post
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 po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
juna8001
post
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.
Go to the top of the page
+Quote Post
DarkAbso
post
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.
Go to the top of the page
+Quote Post
juna8001
post
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.
Go to the top of the page
+Quote Post
DarkAbso
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:00