2016-09-14 3 views
0

사용자가 특정 그룹에 가입 할 수있는 웹 사이트를 만들고 있습니다. 이제는 각 그룹에 속한 사용자 세트 및/또는 각 사용자가 가입 한 그룹 세트를 유지해야합니다. MySql은 배열을 지원하지 않으므로 그룹의 사용자 배열 ("그룹"테이블의 필드) 또는 사용자 그룹의 배열 ("사용자"테이블의 필드)을 유지할 수 없습니다. . 어떻게 이것을 할 수 있습니까?mysql - 웹 사이트에서 그룹의 가입 목록 유지하기

현재 나의 솔루션은 userID 및 groupID에 대한 필드가있는 그룹 가입 테이블을 유지 관리하는 것입니다. 나는이 두 목록 중 하나를 필요로 할 때 그래서 나는

SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3 

또는

SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4 

이 나에게 원하는 목록을 얻을 것이다, 할 수 있습니다. 이것이 가장 효율적인/표준 방법인가요? 아니면 더 좋은 방법이 있습니까?

답변

1

괜찮으 셨습니다. 하나 (예 : user.profile_id = profile.id 통해 연결 userprofile)

  • 하나 - - 많은 (usermessagesmessage.user_id = user.id 통해 연결)
    1. 하나 :

      는 일반적으로 상대 데이터베이스의 레코드 사이의 관계의 3 종류가 있습니다

    2. 많은 - 많은

    당신의 경우는 라스 t는 항상 세 번째 테이블을 통해 작동합니다.

    사건에 대한

    그들의 가입으로 모든 사용자를 선택 users_subscriptions (user_id, subscription_id)

    예 쿼리가 될 수 있습니다

    내가 제대로 질문을 이해한다면
    SELECT u.name, GROUP_CONCAT(s.name) as `subscriptions` 
    FROM users u 
    JOIN users_subscriptions us ON us.user_id = u.id 
    JOIN subscriptions s ON us.subscription_id = s.id 
    GROUP BY u.id 
    
    +0

    감사합니다. @Stalinko! – samurdhilbk

    1

    , 즉 표준 방법입니다.

    사용자 테이블과 그룹 테이블 사이에있는 "피벗 테이블"을 만들었으며 두 테이블 간의 관계를 저장합니다. 이것은 다 - 대 - 다 관계가 관계형 데이터베이스에 저장되는 방식입니다. 올바르게 말한 것처럼 그룹의 모든 구성원이나 구성원의 모든 그룹을 그런 방식으로 검색 할 수 있습니다.