2009-04-12 4 views
0

나는이 쿼리를 가지고 있으며 "likes"라는 테이블에 또 다른 조인을 포함해야한다. 여기서 updates.id = likes.update_id이다. 이 조인에는 0 개 이상의 일치 항목이 있습니다.MYSQL one to many JOIN

"SELECT * FROM users 
INNER JOIN updates ON users.remote_id=updates.owner_id 
ORDER BY updates.status_time DESC LIMIT 50" 

이것은 매우 간단하지만 이러한 종류의 쿼리에 대한 예제를 찾을 수 없었습니다.

상황은 기본적으로 항목 목록을 표시하고 있습니다. 각 항목을 만든 사용자를 얻기 위해 사용자 테이블에 조인을 수행합니다. 또한 각 항목을 좋아하는 0 명 이상의 사용자를 표시하기 위해 '좋아요'표를 조인해야합니다.


편집 : 내 솔루션

좋아, 여기에 성공적으로 가입 GROUP_CONCAT를 사용하여 (인해 여러 있다는 사실 각 업데이트에 대해 "좋아"로) 중복 된 결과의 결합.

"SELECT users.*,updates.update_id,updates.content,updates.status_time, 
GROUP_CONCAT(likes.liker SEPARATOR ',') AS liked_by 
FROM updates 
LEFT OUTER JOIN likes ON updates.update_id = likes.update_id 
JOIN users ON users.remote_id = updates.owner_id 
GROUP BY updates.update_id 
ORDER BY updates.status_time DESC 
LIMIT 200" 
+0

을 특정 사용자 :)의 모든 업데이트를

환호 것이 방법 BY (users.remote_id = updates.owner_id) 주문 업데이트 updates.time에 의해 주문해야하지만, resu에는 '시간'필드가 없습니다. 거기에 무엇이 있습니까? –

+0

또한 세 테이블 각각에 대해 전체 열 목록을 갖는 것이 도움이됩니다. users.id 컬럼과 updates.id 컬럼이있는 경우, 조인이 unique.proxy (고유하지 않은 컬럼 이름의 주요 문제점 중 하나)에 있더라도 users.id 만 보일 수 있습니다. –

+0

예, 고유하지 않은 열 이름이 혼동을 일으켰습니다. 나는 그것을 알아 냈고 원래 게시물을 솔루션으로 업데이트했습니다. 감사! – makeee

답변

2
SELECT * FROM users 
LEFT OUTER JOIN updates ON users.remote_id=updates.owner_id 
INNER JOIN likes ON <join condition here> 
ORDER BY updates.time DESC LIMIT 50 

그 일을 할 것인가?

그렇지 않은 경우 정확하게 질문을 명확하게 할 수 있습니까? 쿼리가 작동하지 않습니까? 당신이 왼쪽을 사용해야은 가입 1 N과 관련이있는 경우

+0

일치하는 항목이 0 개 이상인 경우 "LEFT OUTER JOIN"이라고 생각하십시오. – dkretz

+0

아. 그렇다면 더 의미가 있습니다. – Kalium

+0

메인 포스트에서 편집하십시오. 그것이 불분명한지 저에게 알리십시오. 나는 약간 피곤하다. – makeee

1

, 난 LEFT 가입 사용자 * FROM 당신이

"SELECT 다음과 같은 방법으로 DOIT한다 likes.user_id 단 한 사용자가 많은이 있다면 의미 updates.time의 DESC의 LIMIT 50 "

당신이 소유권을 주장