同じステートメントでMySQLユーザー定義変数を読み書きすることがどれほど安全でないかについて、私はたくさん読んだことがあります。この使用例は非常に単純に思えますが、他のユーザーの意見を知りたかったのです。
ここに、スコアと重みの表があります。私はランキングを行っているので、スコアで並べ替え、必要な数になるまで重みの現在の合計を計算します。Hibernate を使用しているため、FROM 句で副選択を行うことができません。
SELECT
score, weight, @val := score
FROM
tmp, (SELECT @runtot := 0) init
HAVING
(@runtot := @runtot + weight) <= (7)
ORDER BY score;
評価と比較は同じ式の一部であるため、これはかなり安全に思えます。次に、@val は最後に評価されたスコアに設定され、'SELECT @VAL' を実行して最後の値を取得できます。
これはユーザー定義変数の安全な使用法ですか?