Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Dodawanie rekordu raz na miesiąc
kryko
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----


Problem jest taki. W jaki sposób mogę zabezpieczyć taka sytuacje:
Mam tabele z produktami i przypisane do nich ID. Dodatkowo mam tabele z rezerwacjami gdzie kluczem obcym jest ID Produktów. Jak rozwiązać sytuacje, żeby można było wykonać rezerwacje na dany produkt maksymalnie raz w miesiącu. Cos na zasadzie, że jeśli pójdzie INSERT do tabeli z Rezerwacjami to należy sprawdzić czy przypadkiem w tym miesiącu dany produkt nie był już rezerwowany i w razie konieczności zwrócic odpowiedni komunikat.
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Trzeba zapisać datę rezerwacji, a przed dodaniem nowego rekordu dla tego produktu sprawdzać, czy dany miesiąc się już skończył, czy jeszcze nie.
Oczywiście wcześniej trzeba sprawdzić, czy określony produkt był dodany w danym miesiącu.

Ten post edytował mortus 19.12.2012, 13:53:27
Go to the top of the page
+Quote Post
kryko
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----


No tak w tabeli Rezerwacji przechowuje data. Pytanie brzmi JAK to sprawdzać. Jakaś procedura po stronie bazy czy może po stronie kodu php.
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Zapytaniem z poziomu PHP:
  1. SELECT * FROM `tabela` WHERE `id` = :ID AND YEAR(`data`) = :YEAR AND MONTH(`data`) = :MONTH

gdzie:
:ID - id produktu,
:YEAR - date('Y', time())
:MONTH - date('m', time())

Jeżeli powyższe zapytanie zwróci cokolwiek, to w danym miesiącu produkt o id :ID był już rezerwowany.
Go to the top of the page
+Quote Post
kryko
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----


Cytat(mortus @ 19.12.2012, 14:22:01 ) *
Zapytaniem z poziomu PHP:
  1. SELECT * FROM `tabela` WHERE `id` = :ID AND YEAR(`data`) = :YEAR AND MONTH(`data`) = :MONTH

gdzie:
:ID - id produktu,
:YEAR - date('Y', time())
:MONTH - date('m', time())

Jeżeli powyższe zapytanie zwróci cokolwiek, to w danym miesiącu produkt o id :ID był już rezerwowany.


Rozwiązanie wydawało się być ok. Ale w "praniu" wyszła jego niedoskonałość.
Problem się pojawia jak ktoś rezerwuje datę z nie aktualnego na daną chwilę miesiąca. A więc przykładowo jeśli ktoś nie rezerwował daty w grudniu, to może tak na prawdę zarezerwować mi cały styczeń.
Mi zależy na tym aby konkretna osoba mogła w miesiącu dokonać tylko JEDNEJ rezerwacji. Niezależnie na jaki termin (aktualny czy bardzo odległy). Takie zabezpieczenie do nietworzenia fikcyjnych rezerwacji.
Ma ktoś jakieś pomysł na modyfikacje tego zapytania do bazy? Bądź może jakaś sugestia co do napisania jakieś procedury po stronie bazy (niestety nigdy tego nie robiłem).
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Nie wiem, w jakim formacie przesyłasz datę, ale w powyższym zapytaniu wiąże się to jedynie z zastąpieniem funkcji time(). Zatem:
:MONTH - date('m', strtotime(DATA_REZERWACJI))
:YEAR - date('Y', strtotime(DATA_REZERWACJI))
DATA_REZERWACJI - $_POST['data_rezerwacji']
Go to the top of the page
+Quote Post
kryko
post
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----


Dokładnie, ten sposób jest ok. Wczoraj już na niego wpadłem i działa w porządku.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 11:26