Oferta wyróżniona przez x dni
Czas płynie nieubłaganie, a jakiekolwiek nadzieje, że będzie trochę więcej czasu przy skończeniu kolejnego projektu rozwijają się bardzo szybko. Obiecałem sobie jednak, że postaram się umieszczać przynajmniej jeden wpis na miesiąc, aby mój blog nie podzielił losu innych programistów, którzy pochłonięci pracą / rodziną / nowymi doświadczeniami życiowymi porzucili pisanie.
Aktualnie jestem na etapie kończenia serwisu, który będzie skupiał biura nieruchomości z lokalnego rynku. Klient zażyczył sobie, aby biuro nieruchomości mogło zaznaczyć maksymalnie 5 ofert wyróżnionych. Po 14 dniach taka oferta miała samoczynnie tracić status wyróżnionej. Zaznaczone w ten sposób nieruchomości będą pojawiać się jako pierwsze przy wyszukiwaniu oraz będą miały inny kolor.
Rozwiązałem to poprzez dodanie tylko jednej nowej kolumny do bazy, która zawierała datę wygaśnięcia oferty. Dzięki temu nie trzeba się bawić w jakieś automatyczne odznaczanie oferty. Z trudniejszych rzeczy pozostaje sortowanie, które wygląda następująco:
Należało także zapamiętać jakie biuro korzystało z wyróżnionych ofert (bo to usługa dodatkowo płatna). Stworzyłem prostą tabelę:
Po użytkowniku będzie kojarzona firma, która skorzystała z usługi. Jak widać zastosowałem przy usuwaniu RESTRICT, dlatego żaden użytkownik nie może być z systemu usunięty z uwagi właśnie na rozliczenia z operatorem serwisu. Natomiast inne podejście użyłem przy ofercie, którą można usuwać (wstawiana jest wartość NULL do kolumny). By jednak nie stracić informacji co to za oferta była w kolumnie "description" przechowuje najistotniejsze informacje dotyczące tejże oferty.
Słowa kluczowe: PostgreSQL, Projekty, sql, strona, artykuł, blog

Komentarze i opinie
pewnie głupie pytanie, ale dlaczego endDate nie ma default now()+interval '14 days'?
Jeśli klient stwierdzi po jakimś czasie, że jednak to ma być 10 dni, a nie 14... to musiałbym w takim przypadku robić modyfikację w bazie, a bazę staram się zawsze tak przygotować by tam już nic nie zmieniać. Gdy to będzie ustalane z poziomu PHP nawet mogę zrobić dodatkowo możliwość zarządzania tą ilością dni z panelu i klient sam sobie to będzie mógł zmieniać.
fakt, klient ma zawszę racje, nawet gdy jej nie ma :/
A czy zwykłe "favorEndDate DESC" nie zrobi tego samego?
Pozdrawiam
Nie do końca, jest problem gdy oferta wygaśnie. Bo dalej jest sortowanie po dacie pomimo, że wtedy już taka oferta nie już wyróżniona (minął okres czasu, w którym powinna być).
Nowy komentarz