【问题标题】:Merging sql queries to get different results by date合并sql查询以按日期获得不同的结果
【发布时间】:2011-01-11 23:27:26
【问题描述】:

我正在尝试构建“最近的事件”提要,但似乎无法正确查询我的查询,也无法弄清楚如何合并两个查询的结果以按日期对它们进行排序。

一张桌子存放游戏/,另一张桌子存放这些游戏的动作/。

我正在尝试获取最近的事件以向用户展示 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

所以我可以在新游戏发布时将其包含在操作列表中。

当我运行查询时,我得到了所有的 actionid 和他们的 gameid,但我没有得到显示 gameid 发布时的行。

我知道我可能需要运行两个单独的查询,然后以某种方式将结果后缀与 php 合并,但我也完全不知道从哪里开始。

【问题讨论】:

  • 如果您提出问题,切勿抽象自己的代码。发布您正在运行的真实查询。此外,几个示例行和所需的输出也会有所帮助。

标签: php mysql merge


【解决方案1】:
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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多