2013-02-17 1 views
0

사용자, 로그, log_entries 테이블이 3 개 있습니다. 한 사용자는 많은 로그를 가지며 하나의 로그는 많은 항목을가집니다. 그것은 100 명의 사용자가 각각의 사용자는 1000 로그를 가지고 있으며, 각 로그는 1000 개 항목을 가지고있다 말할 수이3 개의 테이블 간의 MySQL 관계

zzz

과 같을 것이다. log_entries 테이블에 100 000 000 줄이 있다는 것을 의미하며 날짜 x에서 로그를 확인하려면 100 000 000 줄에서 원하는 데이터를 필터링해야합니다.

올바른 해결 방법은 무엇입니까?

+0

난 자동 inc 로그에서 기본, session_id, 그래서 각 사용자/세션에 대한 로그의 고유 한 행을, 다음 항목에서 외래 키로 사용하는 것 같아요, 간단한 가입 – KevInSol

답변

0

당신은 INNER JOINCONCAT을 사용할 수

SELECT * 
FROM Users U 
    INNER JOIN Logs L ON U.UserId = L.UserId 
    INNER JOIN Log_Entries LE ON 
    CONCAT(L.UserId,'|',L.Session_Start) = LE.UserIdSession_Start 

내가 그러나 테이블 구조를 변경하면 추천 할 것입니다 - 이것은 매우 이상하다. 최소한 Log_Id를 Logs 테이블에 추가하고 Log_Entries 테이블에도이 필드를 추가하십시오.

+0

그래서 괜찮습니다 log_entries 테이블에 엄청난 양의 행이 있습니까? 나는 그것을 완전히 다르게해서는 안 되는가? 감사. – LukAss741

+0

@ LukAss741 - 로그 테이블 (LogId)에 Auto_Increment 필드를 추가합니다. 그런 다음 Log_Entries 테이블의 해당 필드를 사용하여 첫 번째 필드에 참여하고 제거 할 수 있습니다. 위의 JOIN은 매우 이상하게 보입니다. 특히 날짜가 정확히 같은 형식으로 저장되어 있지 않은 경우 (위의 조인을 사용하기 위해 문자를 교체해야 할 수도 있습니다). – sgeddes