1

チームを格納する MYSQL テーブルがあります。

テーブル構造:
CREATE TABLE teams ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(28) COLLATE utf8_unicode_ci NOT NULL, UNIQUE KEY id (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;

サンプルデータ:
INSERT INTOチームVALUES (1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five');

用途:
SELECT id, name, id as rowNumber FROM teams WHERE id = 4
テーブルの前に実際には 3 つの行があるため、正しい rowNumber を返します。しかし、これは行を削除しない限り機能します。

例:テーブルの前に 2 つの行 (id の 1&2) しかないため、結果が間違っているとし
ますDELETE FROM teams WHERE id = 3;
SELECT id, name, id as rowNumber FROM teams WHERE id = 4

特定の行から id で並べ替えられた「実際の」行番号/インデックスを取得するにはどうすればよいですか?

4

3 に答える 3

2

IDとして返してrowNumberいるので、単にID列の値を返します。なぜ違うと予想するのですか?

@curRow行番号を取得するために変数を定義し、以下のようにサブクエリを使用することをお勧めします。

 SELECT * from 
    (SELECT  ID, 
         NAME, 
         @curRow := @curRow + 1 AS rowNumber
      FROM    Teams t
      JOIN    (SELECT @curRow := 0) curr
      ORDER by t.ID asc) as ordered_team
 WHERE ordered_team.id = 4;
于 2012-10-20T15:03:29.590 に答える
2

それは良い方法ではありませんが、単純なSQLを使用します:

SELECT
    t.id,
    t.name,
    (SELECT COUNT(*)+1 FROM teams WHERE id < t.id) as row_number
FROM teams t
WHERE t.id = 4
于 2012-10-20T15:17:48.397 に答える
0

永続化レイヤー内の行インデックスを気にするのはなぜですか?

保存されたタプルの「インデックス」に本当に依存する必要がある場合は、変数を導入して、各行のクエリ/プログラムコードでそれをインクリメントできます。

編集:それが見つかりました:: MySQLでは、テーブル内のレコードインデックスを含む列をどのように生成できますか?

于 2012-10-20T15:05:56.073 に答える