2017-04-09 17 views
0

저는 현재 학교 프로젝트의 금지/취소 금지 기능을 연구 중입니다. 하나의 is_banned 열이있는 User 테이블이 하나 있습니다. 하나의 업데이트 쿼리를 수행하여 상태를 금지에서 금지로 변경하면 사용자가 금지되는 기간을 포함하는 값을 전달하려고합니다. 24 시간을 말해 보겠습니다. 그 일이 끝나면 자동으로 그를 언 바운드하고 싶습니다. 이것이 가능한가?x 시간 후에 어떻게 하나의 값을 자동으로 변경할 수 있습니까?

답변

1

글쎄, 금지는 아마도 일반적인 경우가 아니므로 이벤트를 사용할 수 있습니다. 누군가가 금지되면, 그 사람을 해산시킬 사건을 만듭니다.

나는 여전히 그 생각을 좋아하지 않습니다. unban 작업이 실행될 예정이면 데이터베이스가 다운 될 수 있습니다. 사용자는 금지 기간을 연장하여 다시 금지 될 수 있습니다.

가장 좋은 방법은 가장 최근의 금지 시간이 적용된 표 (예 : users)의 열을 사용하는 것입니다. 그런 다음 차단이 해제 사용자를 얻을 수있는 뷰를 만들 :

create view v_users as 
    select u.* 
    from users u 
    where u.bantime is null or u.bantime < now() - interval 24 hour; 

키는 코드가 차단이 해제 사용자가 원하는 때마다이보기를 사용하는 것입니다. 그냥 플래그하려는 경우

또는 : 나는 UPDATE 쿼리를 실행할 때마다

create view v_users as 
    select u.*, (u.bantime > now() - interval 24 hour) as isBanned 
    from users u; 
+0

이봐,이 나를 위해 매우 열심히 여전히를, 내가이 똑바로하자, 그래서 is_banned =로 = 0 is_banned 변경하려면 1, 난 bantime라는 열을 업데이 트해야합니까? 그리고 나는 48 시간 동안 48시에합시다. –

+1

@VeraPerrone. . . 실제로'is_banned'를 잊어 버리고'bantime'을 사용하십시오. 보기를 사용하여'is_banned'를 계산하십시오. –

+0

위의 내용은'banned_until'을 저장하면 단축 될 수 있습니다. 이 경우 '간격 24 시간'은 생략 할 수 있습니다. – AMartinNo1

관련 문제