6
4

1 に答える 1

10

あなたは声明を読み違えています。これは、複数の変数を使用する場合の SELECT リスト内の式の順序に関連しています。
提示されているように、この単一変数ステートメントの ORDER BY は、MySQL の現在のバージョンまで順序が保証されており、そのテキストには、それが変更されることを示唆するものは何もありません。

しかし、将来を保証しますか?知るか。


破壊クエリに関して、MySQL がどのように動作するかを再び誤解しています。クエリを分解しましょう。マニュアルのこの文に注意してください

SELECT ステートメントでは、各選択式はクライアントに送信されたときにのみ評価されます。これは、HAVING、GROUP BY、または ORDER BY 句で、select 式リストの値が割り当てられている変数を参照すると、期待どおりに機能しないことを意味します。

クエリの処理順序は大まかに

FROM / JOIN
WHERE / ON
GROUP BY / ROLLUP
HAVING
UNION
SELECT
ORDER BY
@variable resolution

「壊れた」クエリは、変数 WITHIN を同じレベルで使用しようとします。これは、列のエイリアスに対して WHERE/HAVING 句を使用するのと同じくらい罪深いことです。そのため、同じクエリ レベルで変数を使用する MySQL 変数ベースの row_numbering ソリューションは表示されず、常にサブクエリ内にあります。client外側のクエリは、変数/プレースホルダー式がレンダリングされた段階で内側のクエリと見なすことができます。あなたの議論によれば、 @row を直接含む WHERE 句を使用して簡単にそれを壊すことができます (はい、実行されます!)。

于 2012-10-04T14:05:06.193 に答える