代码之家  ›  专栏  ›  技术社区  ›  Jan Hančič

将这两个查询合并为一个查询

  •  4
  • Jan Hančič  · 技术社区  · 16 年前

    我有一个表格,在其中我跟踪不同flash游戏的用户分数。桌子 games_scores 定义如下:

    alt text http://img13.imageshack.us/img13/7262/structure1.png

    此表中的任何游戏,每个用户都可以有多个条目。当我显示记分板时,我只为每个用户选择最大分数。没什么特别的。

    SELECT
     COUNT(*) + 1
    FROM (
     SELECT
      MAX(score)
     FROM
      games_scores gs
     WHERE
      gs.games_id = ?
      AND gs.score > (
       SELECT
        MAX(gs2.score)
       FROM
        games_scores gs2
       WHERE
        gs2.games_id = ?
        AND gs2.users_id = ?
        AND gs2.add_time = ?
      )
      AND gs.add_time = ?
     GROUP BY
      gs.users_id
    ) AS tmp_table
    

    SELECT
     MAX(gs.score)
    FROM
     games_scores gs
    WHERE
     gs.games_id = ?
     AND gs.users_id = ?
     gs.add_time >= ?
    

    我想知道有没有更有效的方法?例如,将查询组合成一个查询。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Glen Solsberry    16 年前