2010-02-02 5 views
1

'최근 이벤트'피드를 작성하려고하는데 올바른 쿼리를 얻지 못하거나 두 쿼리의 결과를 병합하여 정렬하는 방법을 찾을 수 없습니다 날짜별로.날짜별로 다른 결과를 얻기 위해 SQL 쿼리 병합

하나의 테이블에는 게임 /이 있고 다른 테이블에는 해당 게임 /이있는 테이블이 있습니다.

사용자에게 최근 이벤트를 표시하려고합니다. 1) 공개 게임 (게시 됨) 2) 새로운 게임이 만들어지고 게시 될 때 게임에서 취한 조치 2)

그래서, 내 행동 테이블이

actionId, gameid, userid, actiontype, lastupdate

내 게임 테이블은 내가 현재 (I 희망 쉽게 이해 간체)이 같은 쿼리를

gameid, startDate, createdby, published, lastupdate

있습니다.

SELECT actionId, actions.gameid, userid, actiontype, actions.lastupdate 
FROM actions 
JOIN 
(
    SELECT games.gameid, startDate, createdby, published, games.lastupdate 
    FROM games 
    WHERE 
    published=1 AND 
    lastupdate>today-2 
) 
publishedGames on actions.gameid=games.gameid 
WHERE 
actions.type IN (0,4,5,6,7) AND 
actions.lastupdate>games.lastupdate and 
published=1 OR 
games.lastupdate>today-2 AND 
published=1 

이 쿼리는 게임 게시 후 작업이 수행 된 게시 된 게임의 작업을 찾고 있습니다. 그것은 꽤 많이 보여야 할 첫 번째 일을 처리합니다.

그러나 나는 또한 그래서 새로운 게임이 게시 된 작업 목록에 포함 할 수

SELECT games.gameid, startDate, createdby, published, games.lastupdate 
FROM games 
WHERE 
    published=1 AND 
    startDate>today-2 

의 결과를 얻을 필요가있다.

필자가 작성한대로 쿼리를 실행하면 모든 액션 ID와 해당 게임 ID가 표시되지만 게시되었을 때 gameid를 표시하는 행은 표시되지 않습니다.

두 개의 별도의 쿼리를 실행하고 결과를 PHP와 병합해야 할 수도 있음을 이해합니다.하지만 시작점을 완전히 잃어 버렸습니다.

+0

질문을 올리는 경우 절대로 사용자 코드를 추상화하지 마십시오. 실행중인 실제 쿼리를 게시하십시오. 또한 몇 개의 샘플 행과 원하는 출력도 도움이됩니다. – Don

답변

0
select a.id, g.id, g.published ... 
from actions a 
join games g on on g.gameid = a.gameid 
where g.published=1 
and g.lastupdate > today - 2 
and a.type IN (0,4,5,6,7) 
and a.lastupdate > g.lastupdate 
관련 문제