1

私は、php/Mysql クエリに少し行き詰まっています。私は2つのテーブルを持っています:

  table_users              table_ranks
----------------    ------------------------
| id  | points |    | name | points_needed |
----------------    ------------------------
| 1   |   2    |    | lvl0 |      0        |
| 2   |   10   |    | lvl1 |      10       |
| 3   |   21   |    | lvl2 |      20       |
| 4   |   29   |    | lvl3 |      30       |
----------------    ------------------------

次のような出力が必要です。

  • User_1 = lvl0 (ユーザーが 2 ポイントを持っているため)
  • User_2 = lvl1 (ユーザーが 10 ポイントに達したため)
  • ...
  • User_4 = lvl2 (ユーザーがまだ 30 ポイントに達していないため)

あなただと思います:)

よろしく。

4

2 に答える 2

1

あなたはこのようにそれを行うことができます

SELECT
  tu.id,
  tr.name,
  tu.points
FROM table_ranks as tr
  LEFT JOIN (SELECT * FROM table_ranks LIMIT 1,69596585953484) as l
    ON l.points_needed = (SELECT MIN(points_needed) FROM table_ranks WHERE points_needed > tr.points_needed limit 1)
  LEFT OUTER JOIN table_users AS tu ON tu.points >= tr.points_needed AND tu.points < l.points_needed
WHERE tu.id IS NOT NULL
group by tu.id

フィドル

出力

-------------------------
| id  | points   | name |
-------------------------
| 1   |   lvl0   | 2    |
| 2   |   lvl1   | 10   |
| 3   |   lvl2   | 21   |
| 4   |   lvl2   | 29   |
-------------------------
于 2013-02-26T07:30:08.690 に答える
0

これを試してみてください。テーブルのデザインのために少し面倒ですが、

SELECT  u.*, r.name
FROM    table_users u
        INNER JOIN
        (
            SELECT x.name, 
                   x.points_needed start_point, 
                   COALESCE(y.points_needed - 1, 2000000) end_point
            FROM
            (
              SELECT name, points_needed, @rank:=@rank+1 ranks
              FROM table_ranks a, (SELECT @rank:=0) b
              ORDER BY points_needed
            ) x
            LEFT JOIN 
            (
              SELECT name, points_needed, @rank1:=@rank1+1 ranks
              FROM table_ranks a, (SELECT @rank1:=0) b
              ORDER BY points_needed
            ) y ON x.ranks+1 = y.ranks
        ) r ON u.points BETWEEN r.start_point AND r.end_point
于 2013-02-26T07:20:01.733 に答える