• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przechowywanie wielu wartości w wielu wierszach - MySQL

Object Storage Arubacloud
0 głosów
443 wizyt
pytanie zadane 9 listopada 2015 w SQL, bazy danych przez Janusz92 Bywalec (2,150 p.)

Otóż problem wygląda następująco:

Tworzę prosty system rezerwacji miejsc w danej sali. Każde kolejne miejsce, to kolejna liczba całkowita, którą chcę zapisywać do bazy danych. Jedno zgłoszenie rezerwacji to minimalnie jedno, a maksymalnie dziesięć zajętych miejsc. Tabela rezerwacji wyglądałaby następująco (okrojona):

id_rezerwacji id_seansu zarezerwowane_miejsca
1 10 10 11 12
2 10 70 71
3 11 123 124
4 11 90
5 11 1 2 3 4
6 12 15 16

Jak widać zarezerwowane miejsca trafiałyby do bazy oddzielone spacjami. Dzięki czemu będę mógł zrobić grupową konkatenację (GROUP_CONCAT()) dla wierszy o takim samym id_seansu. Otrzymany string byłby eksplodowany w php do tablicy i na tej podstawie sprawdzałbym już zajęte miejsca na dany seans.

Moje pytanie dotyczy tego, jaka jest inna możliwość rozwiązania kwestii zapisu zarezerwowanych miejsc?

Operowanie na stringach (GROUP_CONCAT()) wydaje mi się trochę okrężną drogą.

Słyszałem o tabelach zagnieżdżonych, czyli w każdym polu "zarezerwowane_miejsca" istniałaby jednokolumnowa tabela przechowująca osobne miejsce w osobnym wierszu. Nie wiem nawet czy to ma sens. Prosiłbym o jakieś podpowiedzi. Z góry dziękuję.

4 odpowiedzi

+1 głos
odpowiedź 9 listopada 2015 przez furas Maniak (53,800 p.)
edycja 9 listopada 2015 przez furas

Zwykle robi się osobną tabelę, w której zapamiętuje się w osobnych wierszach id_rezerwacji i jeden numer miejsca 

id id_rezerwacji miejsce
1 1 10
2 1 11
3 1 12
4 2 70
5 2 71

 

ps. w pierwszej tabeli zostawiasz tylko id_rezerwacji i id_seansu 

komentarz 9 listopada 2015 przez Janusz92 Bywalec (2,150 p.)
Hmm, a jak wyglądałoby zapytanie, które wypisze mi wszystkie miejsca dla danego id_seansu w takim układzie tabel?
komentarz 9 listopada 2015 przez furas Maniak (53,800 p.)
Pod linkiem nasz działający przykład, na którym można potrenować.

http://sqlfiddle.com/#!9/a009b/3

Czasami wykonywanie zapytań trwa trochę dłużej.
komentarz 9 listopada 2015 przez Janusz92 Bywalec (2,150 p.)
Wygląda sensownie. Za jakiś czas postaram się wdrożyć to w mój projekt i dam znać :)
0 głosów
odpowiedź 9 listopada 2015 przez jeremus Maniak (59,720 p.)

ja bym jednak przechowywał te informacje w wielu wierszach a nie jednym

id_rezerwacji id_seansu zarezerwowane_miejsce
1 10 10 
2 10 11
0 głosów
odpowiedź 9 listopada 2015 przez Boshi VIP (100,240 p.)
Zważ na to, że dla każdej sali masz osobne miejsca, tak więc wypada mieć tabele łączącą miejsca.rezerwacje i sale.
komentarz 9 listopada 2015 przez Janusz92 Bywalec (2,150 p.)
id_seansu odnosi się do tabeli z seansami, w której z kolei będzie klucz do tabeli z salami ("w jakiej sali odbywa się dany seans"), natomiast w tabeli z salami będą już podane konkretne schematy potrzebne do rysowania sali w przeglądarce oraz maksymalna ilość miejsc w danej sali. Nie wiem czy dokładnie o to Ci chodziło, anyway robiłem już coś takiego i działało :)
0 głosów
odpowiedź 9 listopada 2015 przez Frendom Pasjonat (18,900 p.)
Zrobilbym tak samo jak jeremus. Plan w jakim ty masz to ulozone mija sie z normalizacja tabel i sprowadzania ich do postaci normalnych. Swoja droga te miejsca bedziesz zapisywal jaki int czy varchar?
komentarz 9 listopada 2015 przez Janusz92 Bywalec (2,150 p.)
Jeżeli byłaby to metoda z GROUP_CONCAT(), to varchar, ponieważ miejsca musiałyby być oddzielone spacjami.

Int bym dał dla metody jedno miejsce w jednym polu.
komentarz 9 listopada 2015 przez Frendom Pasjonat (18,900 p.)
wszedzie daj varchar, int daje sie tylko do atrybutow, na ktorych bedzie wykonywac sie obliczenia :)
komentarz 9 listopada 2015 przez Janusz92 Bywalec (2,150 p.)
Dziękuję za wskazówkę.

Podobne pytania

0 głosów
2 odpowiedzi 375 wizyt
0 głosów
3 odpowiedzi 252 wizyt
0 głosów
1 odpowiedź 274 wizyt
pytanie zadane 29 października 2017 w PHP przez olekjs Gaduła (4,540 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...