2010-12-07 5 views
1

관련 질문을 검색했지만 충분히 압축하지 못했습니다. 내 경험복잡한 MySql의 일대 다 문의

current_status 
id 
user_id 
status_id 
created 

users 
user_id 
other... 

CURRENT_STATUS은 감사 목적에 주로 사용되는 ... 디자인 문제가 될 수 있습니다 날이 알려줍니다. 사용자 상태가 변경 될 때마다 새 레코드가 current_status에 삽입됩니다.

검색어는 각 사용자의 최신 상태와 사용자 세부 정보 만 반환하고 싶습니다 ...

일부 사용자의 상태는 '작동 중', '실행 중', '적용 중', '해고 중'등입니다.
SELECT users.*, current_status.status_id AS status 
FROM users 
JOIN current_status ON users.user_id = current_status.user_id 
WHERE users.user_id = '1' 

사용자에게 가장 최근 status_id를 반환하도록 쿼리를 어떻게 말합니까?

ORDER BY current_status.created DESC LIMIT 0,1 

그러나 정확한 사용자 지정 방법은 여러 사용자를 반환하려는 경우 어떻게해야합니까?

도움을 주시면 감사하겠습니다. 당신이 나중에 자신에게 쿼리를 저장하기 위해 테이블에 가입하려면

답변

1

편집 당신은 또한 EDITv2

SELECT users.*, 
     (SELECT current_status.status_id 
      FROM  current_status 
      WHERE current_status.user_id = users.user_id 
      ORDER BY current_status.created DESC 
      LIMIT 1) AS status 
FROM  users 
WHERE  users.user_id = '1' 

... 지금 당신의 테이블/컬럼의 걸림이 생각 사용할 수 있습니다 :

SELECT users.*, current_status.* 
FROM  users 
    LEFT JOIN current_status 
    ON  current_status.status_id = (
    SELECT current_status.status_id 
    FROM  current_status 
    WHERE current_status.user_id = users.user_id 
    ORDER BY current_status.created DESC 
    LIMIT 1 
) 
WHERE  users.user_id = '1' 
+0

고맙습니다. SELECT 문을 제외한 모든 부분에서 하위 쿼리를 사용했습니다. 그것은 매력처럼 작동합니다. – csi

+0

도와 줘서 기쁩니다! 또한이 질문을 통해 나타날 수있는 다른 사람/다른 사람에게 올바른 답을 표시하도록하십시오. ;-) –

0

아마도 다음과 같이 할 수 있습니다.

SELECT users.*, current_status.status_id AS status 
FROM 
users, 
current_status 
WHERE users.user_id = '1' AND 
users.user_id = current_status.user_id AND 
current_status.status_id IN (SELECT max(status_id) FROM current_status GROUP_BY user_id)) 
0

슬프게도 MySQL은 지원하지 않습니다. over(order by ...) 기능. 마지막 상태를 모두 선택하는 하위 쿼리가 있습니다.

select 
    user.user_id, status.status_id, status.created 
from user 
    join status on user.user_id = status.user_id 
    join (
    select user_id, max(created) 
    from status 
    group by user_id 
) last_status 
on 
    status.user_id = last_statuses.user_id 
    and status.created = last_statuses.created