[解決済み] SQLのIN()句の値の順番で並べる
2022-04-24 20:44:38
質問
IN()句の値の順序で並べ替える方法(より良い方法)はないものかと考えています。
問題は、2つのクエリを持っていることです。1つはすべてのIDを取得し、もう1つはすべての情報を取得することです。最初のクエリでは、IDの順序を作成し、2番目のクエリで順序付けする必要があります。IDは正しい順序でIN()句に入れられます。
つまり、(極端に簡略化すると)こんな感じでしょうか。
SELECT id FROM table1 WHERE ... ORDER BY display_order, name
SELECT name, description, ... WHERE id IN ([id's from first])
問題は、2番目のクエリが、IN()句に入れられたIDと同じ順序で結果を返さないことです。
私が見つけた1つの解決策は、すべてのIDを自動インクリメントのフィールドを持つtempテーブルに入れ、それを2番目のクエリに結合することです。
もっと良い方法はないでしょうか?
注 最初のクエリはユーザーによって実行され、2番目のクエリはバックグラウンドプロセスで実行されるため、サブクエリを使って2つのクエリを1つにまとめる方法はありません。
私はMySQLを使用していますが、他のDBにもどのようなオプションがあるのかを記載してもらえると便利かと思います。
解決方法は?
MySQLの
FIELD()
関数を使用します。
SELECT name, description, ...
FROM ...
WHERE id IN([ids, any order])
ORDER BY FIELD(id, [ids in order])
FIELD()
は、最初のパラメータと等しいインデックスを返します(最初のパラメータ自身は除く)。
FIELD('a', 'a', 'b', 'c')
は1を返します。
FIELD('a', 'c', 'b', 'a')
は3を返します。
に貼り付けると、まさに思い通りの動作になります。
IN()
節と
FIELD()
関数を同じ順序で実行します。
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] 最初の行への結合方法
-
[解決済み] SQLの複数列の順序付け
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのデータバックアップにmysqldumpを使用する方法
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySQLのselect、distinct、limitの使い方
-
MySQLのNULLについて解説した記事
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
[解決済み] nodejsでfindAllのソート順を続編にする
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新