0

私はテーブル「points_level」を持っています:

id | description | level
--------------------------
1  | noob        | 0
2  | rookie      | 50
3  | The boss    | 100

たとえば、ポイントを整数として与えるレベルのIDを返す関数を構築する必要があります。

select calc_level(12)
result: 1

select calc_level(90)
result: 2

select calc_level(300)
result: 3

select calc_level(100)
result: 3

select calc_level(-50)
result: 1

points_level テーブルにレベルを追加する必要があるので (近い将来)、単純な "CASE WHEN" で結果を計算するべきではありません。しかし、MYSQLには何もありません。この種の関数を作成するためのMYSQL SYNTAXがわかりません:(

誰かが私を助けることができますか?

ありがとう

4

1 に答える 1

1

アルゴリズムは比較的単純です。指定されたポイントが以上の id が必要ですlevel

SELECT id
FROM points_level
WHERE 
  (<points_input> >= level)
  -- For negative input, return the lowest level
  OR (<points_input> < 0 AND level <= 0)
ORDER BY level DESC LIMIT 1

http://sqlfiddle.com/#!2/07601/4

関数でラップする適切な方法については、MySQLCREATE FUNCTION構文を確認してください (本当に必要な場合)。

CREATE FUNCTION calc_level (in_points INT)
RETURNS INT
BEGIN
    DECLARE id_out INT;
    SET id_out = (
      SELECT id
      FROM points_level
      WHERE
        in_points >= level 
        OR (in_points < 0 AND level <= 0)
      ORDER BY level DESC LIMIT 1
    );
    RETURN id_out;
END
于 2013-01-07T14:11:48.343 に答える