![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 13 Dołączył: 16.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
otóż piszę system wypożyczeń pewnego sprzętu i pojawił się problem przy tworzeniu rezerwacji dla danego sprzętu. Użytkownik robiąc zamówienie (rezerwację) podaje datę rozpoczęcia oraz zakończenia zamówienia. Daty przechowuję w formacie timestamp (możliwa wymiana na inne ale wiąże się to z przebudową dużej części aplikacji). Kolejnym krokiem jest utworzenie na podstawie podanego czasu trwania zamówienia listy dostępnego sprzętu w tym czasie. Najpierw daty: - interesują mnie tylko dni, nie dokładne godziny. Czy ktoś odda sprzęt 09.10.2009 o 8 rano czy o 22 to nieistotne bo dostępny będzie on od 10.10.2009 - jest kilka przypadków które muszę rozpatrzyć: + data zamówienia zawiera się w innej dacie wypożyczenia sprzętu + data zamówienia obejmuje w całości datę innego wypożyczenia + data zamówienia jest "przecięta" przez moment rozpoczęcia lub zakończenia innego zamówienia. Jak to sprawdzić? Chodzi o to żeby żaden przypadek nie zachodził (czyli sprzęt będzie dostępny w tym terminie). Problem z MySQL. 1. Tabela sprzet: najważniejsze jest to że przechowuje ilość posiadanego sprzętu (ogólnie) 2. Tabela zamówienia: przechowuje czas trwania zamówienia - data start i koniec oraz jakieś pole INT wskazujące czy zamówienie jest zakończone (całość oddana) czy też nie) 3. Tabela zam_sprzet: id_zamowienia, id_sprzetu, ilość sztuk sprzętu w danym zamówieniu, tu też można dać pole typu INT czy cały sprzęt został zwrócony 4. Tabela zam_zwroty: id_zamownienia, id_sprzetu, ilość oddanych sztuk sprzętu danego typu (można zwracać partiami) Zapytanie będzie dość skomplikowane dlatego proszę kogoś doświadczonego o pomoc (bo MySQL znam tylko podstawy): Wydaje mi się że będzie trzeba pobrać całość danych z tabeli sprzęt (do wyświetlenia informacji o wypożyczanym typie sprzętu), następnie dla każdego sprzętu trzeba sprawdzić czy są jakieś rekordy w tabeli zam_sprzet - jeżeli są to spawdzić w tabeli zam czas trwania istniejącego zamówienia (tu problem porównywania dat opisany wcześniej) i jeżeli się pokrywa z tym które składa użytkownik to pokazać dostępną ilość sprzętu odejmując od ilości bazowej ilość wypożczoną w innych zamówieniach oraz dodając ilość zwróconą. To zapytanie jest jednak dla mnie zbyt skomplikowane i byłbym wdzięczny gdyby ktoś mi pomógł. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
No problem to masz okropny, a szczerze powiedziawszy to żaden, jak masz tabele z sprzętem ogólnie, czyli jaki masz sprzęt na sklepie i masz tabele gdzie masz zamówienia to kurde nie rób intów na bool, ok? To po 1 (inty na bool, masz w int czy sprzęt jest dostępny czy nie, po cholerę, zrób to na boolean). Po drugie zapytanie do bazy danych będzie absurdalnie proste.
Dziękuje. A date to sobie najlepiej trzymać w unix epoch, zwykły int i święto lasu, szybciej sie po int sortuje niż po timestamp, chyba oczywiste, ale jak już masz ten timestamp mysqlowy to go już zostaw, nic się nie stanie. Ten post edytował cojack 10.10.2009, 15:34:53 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 13 Dołączył: 16.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Trochę źle zrozumiałeś o co mi chodzi. Problem co prawda udało mi się rozwiązać i rozwiązanie wcale nie jest tak proste jak napisałeś (a zapytanie SQL ma kilka podzapytań aby sprawdzić co jest dostępne w danym okresie). Wydaje mi się że zrozumiałeś że wypożyczenie sprzętu oznacza "zablokowanie" rekordu z tabeli sprzęt (tak wynika z zapytania). A mi chodziło o ilość sprzętu (każdy sprzęt ma pole ilość i można wypożyczyć dowolną ilość). Ale mniejsza o to.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.06.2025 - 21:10 |