2010-02-02 3 views
1

Je suis en train de créer un flux 'événements récents' et je n'arrive pas à trouver la bonne réponse ou à trouver comment fusionner les résultats de deux requêtes pour les trier par date.Fusion de requêtes sql pour obtenir des résultats différents par date

Une table contient des jeux /, et une autre table contient les actions de ces jeux /. J'essaie d'obtenir les événements récents pour montrer aux utilisateurs 1) les actions prises sur les jeux qui sont publiquement visibles (publiés) 2) quand un nouveau jeu est créé et publié.

Alors, ma table d'actions a

actionId, gameid, userid, actiontype, lastupdate

Ma table de jeux a

gameid, startDate, createdby, published, lastupdate

J'ai actuellement une requête comme celui-ci (simplifiée pour une meilleure compréhension, je l'espère).

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 

Cette requête recherche des actions provenant de jeux publiés dans lesquels l'action a eu lieu après la publication du jeu. Cela prend à peu près la première chose à montrer.

Cependant, je dois aussi obtenir les résultats de la

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

Je peux inclure dans la liste des actions, lorsqu'un nouveau jeu a été publié. Lorsque j'exécute la requête telle que je l'ai écrite, j'obtiens tous les ID et leurs gameids, mais je n'obtiens pas une ligne qui montre le gameid quand il a été publié.

Je comprends qu'il est possible que je doive exécuter deux requêtes séparées, puis fusionner d'une manière ou d'une autre les résultats afterword avec PHP, mais je suis complètement perdu sur où commencer aussi.

+0

Ne jamais résumer votre propre code si vous posez une question à ce sujet. Affichez la requête réelle que vous exécutez. En outre, quelques rangées d'échantillons et la sortie désirée aideraient aussi. – Don

Répondre

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