2011-03-30 2 views
0

나는 내 자신의 인증 시스템을 구축하고있다.SQL, 긴 텍스트 필드에 concat() 로그 데이터를 저장하는 것이 좋지 않습니까?

$query = 'UPDATE `users` SET login_log = concat(login_log, ?) WHERE userKey = ? LIMIT 1 '; 
$vars = array(time().',', $this->userKey); 
$QH = $this->DBH->prepare($query); 
$QH->execute($vars); 

longtext 필드에 데이터를 기록 할 concat()를 사용하는 것이 나쁜 : 지금은에 의해 각 로그인 타임 스탬프를 기록하는 내 데이터베이스 설정을 가지고?
내가 다른 방식으로해야할까요?
이 방법을 사용하여 문제가 될 수 있습니까?

답변

0

제가 생각할 수있는 유일한 점은 비즈니스가 login_log의 한 필드 만 필요로하지 않는 한 연결하려는 이유가 없습니다. 특히 이후 부분에 대한 제약 조건을 수행하려는 경우 특히 그렇습니다. . 당신은 당신이 원했던 time() 컴포넌트를 얻기 전에 다른 모든 로그 텍스트 (여기서는 다른 시간)를 파싱해야합니다.

데이터를보다 쉽게 ​​정규화하고 int PK를 자동 증가시키고 userKey 필드와 login_LogDate 필드를 추가 할 수 있습니다. 로그인 할 때마다 사용자 이름과 현재 시간을 사용자 테이블에 삽입 할 수 있습니다. 그런 다음 분, 초, N 번째 로그인 등을 쉽게 분리 할 수 ​​있습니다.

+0

좋은 지적입니다. 이미 테이블에 몇 가지 다른 카운터 필드가 있습니다. 나는 단지 참조 용 실제 타임 스탬프를 로깅했다. (문제를 해결하기 위해 필요하지 않으면 구문 분석이 문제가되지 않는다.) 내가 생각한 유일한 다른 방법은 별도의 테이블을 만들고 '목록'스타일로 모두 기록하는 것입니다. 나는 오히려 한 곳에서 모든 것을 지키고 싶다. (그다지 사용되지 않을 것이기 때문에). 일을 단순하게 유지합니다. 의견을 보내 주셔서 감사합니다 !!! – PiZzL3

관련 문제