2014-07-05 2 views
0

데이터베이스가 usersuser items이고 각 사용자가 여러 항목을 자신의 계정에 연결할 수 있습니다.mysql의 중복되지 않은 행 집합을 하나씩 반환

User 1 ¬ 
     item id 1 
     item id 2 
     item id 3 
User 2 ¬ 
     item id 1 
     item id 3 
     etc 

이 나의 이상적인 가져 오는 결과가 될 것입니다 :

내 현재 SELECT 쿼리를 갖는 문제 메신저 한번 각 사용자를 반환하고 싶지만 모든 행이 같은 종류의 사용자에 묶여 함께 간단한 루핑으로 데이터를 올바르게 처리 할 수 ​​... left join 시도했지만이 작동하지 않았다.

나는 위와 같은 결과를 어떻게 가져 옵니까? 내가 피하기 위해 노력하고있어 사용자 ID에 대한

SELECT U.user_id, I.item_name 
FROM users U 
LEFT JOIN user_items UI ON U.user_id = UI.user_id 
INNER JOIN items I ON I.item_id = UI.item_id 

사용자가 두 개 이상의 항목이있는 경우 현재 내가 중복받을 데이터 : 이것은 내 현재 쿼리입니다.

답변

0

문제를 올바르게 이해하면 마스터/세부 관계를 트래버스하려고합니다.

JOIN을 사용할 때마다 엔진은 일치하는 모든 행 집합을 출력합니다. 이 경우 사용자가 두 개 이상의 항목을 가지고 있으면 항목 하나 하나와 함께 나타납니다. 이는 다양한 양의 컬럼 또는 "이전 컬럼이 동일한 값을 갖는 경우이 컬럼을 출력하지 않습니다"와 같은 결과 세트를 가질 수 없기 때문에 피할 수있는 것이 아닙니다. 내가 쿼리를 조정 해결하려고하지 않을 것입니다. LEFT JOIN은 항목이없는 모든 사용자도 갖고 싶을 때만 도움이됩니다.

원하는 출력을 얻으려면 결과 세트로 작업해야합니다. 예를 들어, user_id로 결과를 정렬 한 다음, 세트를 탐색하고 변경된 경우에만 user_id를 인쇄 할 수 있습니다. 또 다른 옵션은 2 개의 쿼리를 사용하는 것입니다. 하나는 모든 사용자를 얻는 것이고, 하나는 원하는 항목이있는 모든 항목으로 범위를 좁히고, 다른 하나는 각 사용자의 항목을 가져 와서 첫 번째 항목에서 결과를 탐색하는 것입니다. 질문.

두 가지 해결 방법 모두 저장 프로 시저 또는 프로그래밍 언어를 사용하여 결과를 처리해야합니다.

희망이 도움이됩니다.

+0

흠 놀란 MYSQL에는 이러한 제한이 있습니다. = / – Sir

관련 문제