2010-02-02 131 views
1

我正在嘗試構建「最近的事件」Feed並且似乎無法讓我的查詢正確,或者想出如何可能地合併兩個查詢的結果以對它們進行排序按日期。合併sql查詢以獲得按日期不同的結果

一個表格包含遊戲/,另一個表格包含這些遊戲的動作。

我正在嘗試獲取最近的事件以向用戶展示 1)在公開可見的遊戲上採取的操作(發佈) 2)創建併發布新遊戲時。

所以,我的行動表有

actionId, gameid, userid, actiontype, lastupdate

我的遊戲表有

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 

的結果,所以我可以包括在操作列表中,當一個新的遊戲已經出版。

當我編寫查詢時,我得到了所有的actionids和他們的gameids,但是我沒有得到顯示gameid發佈時的行。

我明白,我可能需要運行兩個單獨的查詢,然後以某種方式將結果與php後合併,但我完全失去了從哪裏開始。

+0

從不抽象自己的代碼,如果你問一個關於它的問題。 發佈您正在運行的真實查詢。此外,一對夫婦樣本行和所需的輸出也會有所幫助。 – Don 2010-02-02 01:03:47

回答

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