2011-08-19 3 views
0

데이터베이스가 각각 booksusers을 가지고 있습니다.sortorder 필드를 기반으로하는 MySQL JOIN

book 테이블의 (정수) sortorder 필드를 기반으로 사용자 및 그들의 첫 번째 서적 목록을 얻고 싶습니다.

다음은 지금 사용하는 SQL의 예입니다. 유일한 문제는 각 사용자에 대해 sortorder 필드를 기반으로하는 첫 번째 서적을 반환하지 않는다는 것입니다.

SELECT 
    b.id, b.user_id, b.sortorder, b.title 
FROM 
    books AS b 
JOIN 
    books_categories AS bc 
ON 
    (b.id = bc.book_id) 
JOIN 
    categories AS c 
ON 
    (c.id = bc.category_id) 
JOIN 
    users AS u 
ON 
    (u.id = b.user_id) 
GROUP BY 
    b.user_id 
+0

sortorder 열은 항상 1부터 시작합니까? –

+0

음. 1, 10, 14 일 수 있습니다. – Cudos

답변

2

각 사용자에 대한 첫 번째 책을 선택하는 하위 쿼리에 가입해야합니다.

SELECT b.id, b.user_id, b.sortorder, b.title 
FROM books b 
JOIN (
    SELECT b2.user_id, min(b2.sortorder) sortorder 
    FROM books b2 
    GROUP BY b2.user_id 
) first_books USING (user_id, sortorder); 
+0

first_books는 b.id, b.user_id, b.sortorder, b.title과 함께 반환되는 필드입니까? – Cudos

+0

하위 쿼리에 대한 테이블 별칭 일뿐입니다. –