2016-12-24 11 views
0

私はMySQLは比較関数で注文できますか?

CREATE FUNCTION CmpRows (a INT, b INT) 
BEGIN 
    IF ((SELECT foo FROM Bar WHERE id=a) etc...) 
    THEN 
     RETURN -1; 
    ELSEIF (other stuff) 
    THEN 
     RETURN 1; 
    ELSE 
     RETURN 0; 
    END IF; 
END 

を、テーブルの行の順序を定義するのMySQL関数を持っている与えられた主キーは、私は、MySQLは、結果セットで注文するには、この機能を使用することはできますか?

+0

はい、うまくいくはずです。これを使ってみましたか? –

+0

@TimBiegeleisen 'SELECT ... ORDER BY CmpRows(???、???)'の文脈でどのような構文があるのか​​わかりません - どうしたら主キーの代わりに主キーを使うのですか?議論? – spraff

答えて

0

決定論

CREATE DETERMINISTIC FUNCTION ... 

ように、この関数を宣言し、あなたがそれを宣言するときに嘘をつきません。それが本当に確定的であることを確認してください。つまり、同じ入力に対して毎回結果が同じであることを確認してください。

それがうまくいくはずです。

+0

引数によって指される行が呼び出し間で変更される可能性がある場合、関数は依然として確定的ですか? – spraff

+0

いいえ、同じ引数を指定すると結果が変わる可能性がある場合、関数は確定的ではありません。結果セットを順序付ける別の方法を検討することができます。あなたが驚いて欲しくないときに、あなたがそれをまったく動作させることができれば、これは驚くべき結果をもたらすかもしれません。 –

+0

それで決定的でないならば、私は 'SELECT ... ORDER BY CmpRows'でいくつかの行を変更し、次に' SELECT ... ORDER BY CmpRows'を実行すると、2回目の順序は最初の順序時間の丸い、またはそれのような何か? – spraff

関連する問題