IN()句の値の順序で並べ替えるのに(おそらくより良い方法が)あるかどうか疑問に思っています。
問題は、2つのクエリがあることです。1つはすべてのIDを取得し、2つ目はすべての情報を取得します。1つ目は、2つ目で並べ替えたいIDの順序を作成します。IDはIN()句に正しい順序で配置されます。
だからそれは(非常に単純化された)のようなものになるでしょう:
SELECT id FROM table1 WHERE ... ORDER BY display_order, name
SELECT name, description, ... WHERE id IN ([id's from first])
問題は、2番目のクエリがIDがIN()句に入力されたのと同じ順序で結果を返さないことです。
私が見つけた1つの解決策は、自動インクリメントフィールドを持つ一時テーブルにすべてのIDを入れ、それを2番目のクエリに結合することです。
より良いオプションはありますか?
注:最初のクエリは「ユーザーによって」実行され、2番目のクエリはバックグラウンドプロセスで実行されるため、サブクエリを使用して2を1に結合する方法はありません。
私はMySQLを使用していますが、他のDBにもどのようなオプションがあるかをメモしておくと便利だと思います。
IN
とFIELD
パラメータが等しいことが保証されていないため、これは最善を尽くします。プログラムコードでこれを行うと、その追加の知識を使用することでより高速になる場合があります。もちろん、サーバーのパフォーマンスを考えれば、サーバーではなくクライアントにこの負担をかける方が賢明です。