Cześć wszystkim!
Chcę wiedzieć, czy możliwe jest utworzenie warunku w pl / sql, aby użytkownik nie mógł dodać 2 posty w ciągu jednej minuty? i jak mogę to zrobić? Wiem, że muszę dodać SYSDATE, ale jak skonstruować warunki? Mógłby ktoś mnie nakierować lub cokolwiek w strone odpowiedzi? na pewno umiescic to potem trzeba w procedurze w ktorej dodaje ale na warunki nie mam pomyslu ;/
co to jest nie mógł dodać 2 posty
? Jeśli chodzi o rekord do jakiejś tabeli to musisz gdzieś trzymać dodatkowo jakiś id usera i czas ostatniego dodania. A potem przy dodawaniu sprawdzasz czy sysdate - ostatni_czas > 1
w triggerze i tyle
nie mogl dodac 2 posty tzn po dodaniu jednego posta uzytkownik musialby odczekac minute zanim moglby dodac kolejnego, wiem ze prawdopodobnie jest dla Ciebie latwe itd no ale robie to pierwszy raz, mowisz sysdate-ostatniczas>1 , skad wiemy ze mowiac ,,1" mamy na mysli minuty? chodzi mi wlasnie o to jak zapisac by pl/sql wiedzial ze to chodzi nam wlasnie o minuty a nie o cos innego
Nie powinieneś używać odejmowania dat (data1 - data2), jeśli nie znasz się za bardzo na typach danych w Oracle (jak sam napisałeś).
Użyj warunku:
SYSDATE > a + 1/(24 *60), gdzie a jest ostatnim czasem dodania przez użytkownika postu na forum (wówczas pozwalasz mu wejść z kolejnym postem). Oracle łyknie taką składnię bez problemu.
Moglby ktos jeszcze odpowiedziec w jaki sposob moglbym uzyskac doostep do drugiego najnowszego czasu uzytkownika o pewnym id??
shadox napisał(a):
Moglby ktos jeszcze odpowiedziec w jaki sposob moglbym uzyskac doostep do drugiego najnowszego czasu uzytkownika o pewnym id??
@shadox
W Oraclu jest co prawda niby-kolumna ROWNUM
, ale nie jest ona do końca prosta do twojego przypadku, w którym trzeba:
- Wyciagnąć dane z tabeli dla użytkownika o konkretnym id
- Posortować je według daty
- Do wyniku dołożyć dodatkową koumnę
ROWNUM
- Z tegoż wyniku wyciagnąć ten wiersz, którego
ROWNUM
(a dokładniej alias ROWNUM) jest równy 2
Napisałem dla ciebie gotowe zapytanie, dla użytkownika o id 10:
SELECT * FROM (SELECT ROWNUM rn, some_date FROM (SELECT some_date FROM some_table WHERE user_id = 10 ORDER BY some_date)) WHERE rn = 2;