[解決済み] MySQLはORDER BYで行の位置を取得する
2023-02-28 15:32:15
質問
以下のMySQLテーブルを使用します。
+-----------------------------+
+ id INT UNSIGNED +
+ name VARCHAR(100) +
+-----------------------------+
を選択するにはどうしたらよいですか?
シングル
でソートしたときに、テーブルの他の行との間の位置と
name ASC
. つまり、テーブルのデータを名前でソートすると、次のようになります。
+-----------------------------+
+ id | name +
+-----------------------------+
+ 5 | Alpha +
+ 7 | Beta +
+ 3 | Delta +
+ ..... +
+ 1 | Zed +
+-----------------------------+
どのようにすれば
Beta
行の現在の位置を取得するにはどうしたらよいでしょうか?私が探している結果セットは、次のようなものです。
+-----------------------------+
+ id | position | name +
+-----------------------------+
+ 7 | 2 | Beta +
+-----------------------------+
単純な
SELECT * FROM tbl ORDER BY name ASC
を実行し、PHPで行を列挙することができますが、1つの行のために潜在的に大きな結果セットをロードするのは無駄のように思えます。
どのように解決するのですか?
これを使います。
SELECT x.id,
x.position,
x.name
FROM (SELECT t.id,
t.name,
@rownum := @rownum + 1 AS position
FROM TABLE t
JOIN (SELECT @rownum := 0) r
ORDER BY t.name) x
WHERE x.name = 'Beta'
...一意な位置の値を得ることができます。これは
SELECT t.id,
(SELECT COUNT(*)
FROM TABLE x
WHERE x.name <= t.name) AS position,
t.name
FROM TABLE t
WHERE t.name = 'Beta'
...は同値を与えることになります。 IE: 2位に2つの値がある場合、最初のクエリが一方に2、もう一方に3の位置を与えるとき、それらは両方とも2の位置を持つことになります...
関連
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] テーブルネーミングのジレンマ:単数形と複数形の名前【非公開
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] VARCHARとCHARの違いは何ですか?
最新
-
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 - ストアドプロシージャ (データ型、関数)
-
[解決済み] SQL Serverで実行中の合計を計算する
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み】MySQLのROW_NUMBER()
-
[解決済み】MySQL - selectで行番号を取得する