代码之家  ›  专栏  ›  技术社区  ›  DarkMath

如何在视图中对查询进行“迭代”?

  •  0
  • DarkMath  · 技术社区  · 5 年前

    我有以下SQL查询。

    SELECT
        us.foo,
        us.user_id_2,
        (
            SELECT COUNT(*)
            FROM my_table x
            WHERE x.foo >= us.foo
                AND x.user_id_2 = 53
        ) AS position
    FROM my_table us
    WHERE us.user_id_1 = 53
    ORDER BY position;
    

    这给了我这样的结果:

    foo 用户_id_2 位置
    42 687 0
    40 9832 1.
    39 12 2.
    ... ... ...

    这可以解释如下:用户 687 是用户的第一个匹配项 53 带分数 42 使用者 9832 是第二场有比分的比赛 49 等等 我的问题是用户 53 在查询中进行了硬编码。 我需要中每个用户的结果 users 桌子 更准确地说,我想要这样的东西:

    foo 用户_id_1 用户_id_2 位置
    42 53 687 0
    40 53 9832 1.
    39 53 12 2.
    ... ... ... ...
    193 12 53 0
    175 12 9832 1.
    ... ... ... ...

    我基本上想要的是反复 SELECT id FROM users 用那个id代替我的硬编码 53 根据我的查询。

    订购在这里并不重要。我正在使用MariadDb 10.3。

    我该怎么做?

    的结构 my_table 是

    用户_id_1 用户_id_2 foo
    53 687 42
    687 53 42
    53 9832 40
    9832 53 40
    53 9832 39
    9832 53 39
    ... ... ...
    0 回复  |  直到 5 年前
        1
  •  1
  •   buddemat nerdWannabe    5 年前
    SELECT
        us.foo,
        us.user_id_1,
        us.user_id_2,
        (
            SELECT COUNT(*)
            FROM my_table x
            WHERE x.foo >= us.foo
                AND x.user_id_2 = us.user_id_1
        ) AS position
    FROM my_table us
    ORDER BY user_id_1, position;
    

    看见 db<>fiddle .