• ベストアンサー

レコードの順番

レコードの順番 全体の昇降を変更することはできるのですがレコードの行を一つ上にあげることは可能ですか? SQL文があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • moousi
  • ベストアンサー率70% (21/30)
回答No.2

そのテーブルにに一意な番号を割り当てた後、お好みの順番に変えたらいかがでしょうか。 create table t1 (c1 varchar(50)); insert into t1 values ("りんご"),("バナナ"),("かっぱえびせん"); 上記が現状の状態と仮定します。 set @pos = 0; create table t2 select @pos:=@pos+1 as c1,c1 as c2 from t1; りんごとバナナの位置を入れ替えます。 update t2 set c1=2 where c2="りんご"; update t2 set c1=1 where c2="バナナ"; select * from t2 order by c1; この後が問題なんですけど、このままテーブル名変更、c1カラムをauto incrementするようにして使ってもいいんですが、 なんとなく、select * from テーブル名; というソートなしで検索したときの順番を気にされているような気がします。 その場合、また同じように create table t3 select c2 from t2 order by c1; alter table t1 rename to t1_bak; alter table t3 rename to t1; あとは、プライマリーキーや他のインデックスがあれば、追加して、お引っ越し完了です。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.3

>レコードの行を一つ上にあげることは可能ですか? #2さんの回答にあるように数字( 任意の文字列でも可能ですが・・・ )をキーにして、そのキーを修正すれば可能ですが、どのフィールドでもソートすることで表示される順番を自由に変更できるので、何か勘違いしているように思えますが???

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>レコードの行を一つ上にあげる SQLにおいて、レコードの表示順列はORDER BY で処理をする以外保証されていません。 したがってレコードを上げ下げするという処理自体がSQLにはありません。 ALTER TABLE `テーブル` ORDER BY `ソートするフィールド` DESC のような処理で、ある程度の調整はできます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 順番に並んだ各レコードの、前後のレコードと結合

    質問です。mysqlのTBLテーブルの同じカラムに 1 3 7 10 11 という数字データのレコードが入っています。 この時 3 1 7 3 10 7 11 10 と、それぞれのレコード(左)よりひとつ小さな数のレコード(右)を 並べて取得するSQL文はどう書けばいいのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • レコードの抽出

    PerlCGIでSQL-ENGINE.plというライブラリを使ってSQLを実行しています。最も結構ローカルなフリーのライブラリだから(作った人におこられるか)それの使い方を教えてくださいという訳ではありません。 一般的な形で結構ですので、SQL文を教えてもらいたいのです。 例えば select * from テーブル where 抽出条件 order by 何かの基準で降順並替え; として、さらにこの抽出結果の上から11番目のレコードから20番目のレコードだけを抽出したいとすると、これにどのようなSQL文を追加したらよいのでしょう。

  • (アクセス)レコードの値を順番に取得したい

    フォームのビューが「帳票フォーム」で Sub test1() MsgBox Form_sqlのフォーム.タイトル End Sub を実行すると 一番最初のレコードの値が取得できるのですが 2行目、3行目を取得するにはどうすればいいでしょう? ADOを使って rs.MoveNext をするしかないでしょうか? よろしくお願いします。

  • 複数のレコードの値を取り出すには

    初心者です。あるカラムから複数のレコードの値を取り出すにはどのように書けばよいかどなたか教えていただけますでしょうか。 下記のコードではcalendartblというテーブルから1レコードのみ取り出せます。 テーブル:calendartbl holiday(カラム名) 2016/9/12(レコード1行目) 2016/9/14(レコード2行目) 2016/9/20(レコード3行目) 2016/9/26(レコード4行目) 2016/9/28(レコード5行目) コード: $sql = "SELECT calendartbl.holiday FROM calendartbl"; $ret = f_db_select($sql); foreach ($ret as $h){ $holiday = $h['holiday']; } 結果=2016/9/12 では複数のレコード、つまり「2016/9/12、2016/9/14、2016/9/20、2016/9/26、2016/9/28」を取り出して、上記の$holidayに代入させるにはどのように書けばよいでしょうか。 どなたか教えて頂けたら幸いです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • レコードを上から順に読み込みたい

    SQLを初めたばかりです。ACCESS2010を使っています。 テーブルを上から順番に読み込んで、とあるフィールドの数値に 1を足してから該当レコードを更新する単純なことがしたいのですが 上手く行きません。 現在は次のようになっています。 rs.Open "uriage", cn, , adLockOptimistic Do Until rs.EOF sql = "" sql = "UPDATE uriage SET 売上額 = 売上額 + 1" cn.Execute sql rs.MoveNext Loop これを実行すると、売上額フィールドに入っている数値に レコードの件数分の数値が足された結果となります。 例えばレコード件数が10で、売上額が1なら11、となります。 多分初歩的な事が理解できていないのだと思いますが 何故なのかがわかりません。

  • 列を行に表示する方法は?

    できればSQL文で作りたいと思っています。 表1 行1 行2 == == 1  A 1  B 1  C 2  A 2  D 行1で同一の値のものは10個しかないと決まっています。 (つまり行1=1のものは10列まで) これを次のように表示したいと思っています。 行1 行2 行3 行4 == == == == 1  A  B  C 2  A  D Access+SQL*Serverを使っています。このようなViewをつくるSQLが発行できればベスト。関数とか使ってでもなんとかできないでしょうか? SQLの実行結果のレコードを順番に配列に入れるとかしかいと無理でしょうか? レコード結果はFirst,Lastを使って先頭と最後だけは取り出せるのですが、2番目~9番目も取り出す関数があったら、それをSQLに組み入れるだけで済むのですが。 どうぞ、よろしくお願いします。m(○)m

  • レコードセットのリターンについて

    プログラミング初心者です。 基本的な質問です。 教えてください。 例えば Select name, id from kaaisha order by id descという SQL文を Vbscriptで生成したRecordsetオブジェクトでOpenした時というのは、 idが最上値のレコード1行のみ返すのでしょうか? それともこの場合、降順で全てのレコードを返すのでしょうか? よろしくお願いします。

  • 1テーブル内レコードの各フィールド値の差分チェック

    お世話になります。 現在、1テーブル内をログテーブル用として利用しています。 JSPでフォームを作成して各フィールド値を、 Webサイト画面上から変更可能なつくりにしており、 複数あるいずれかのフィールドの値を1つ以上変更してから、 [保存]ボタンを押下した際に、   ↓ その変更前のレコード1件と、 変更後のレコード1件を、 同じログ用テーブル内へフラグ(変更前:0、変更後:2)を それぞれ変えて、 INSERT INTOでレコードを計2件追加しています。 (あわせて、追加時のタイムスタンプをセットするフィールドもあるので、  どんどんレコードを追加可能な仕様です) そこでご質問なのですが、 この2つのレコードのみを比較して、 値が異なるフィールド名のみを、 (ときには複数フィールドにおいて値が異なるケースも有ります) SELECTなどで表示させるようなSQL文の 作り方をご存じの方がいらっしゃいましたら、 ぜひ教えてください。 なぜこのようなご質問をさせていただいたかと申しますと、 ログテーブル内の上記した2件のレコードを比較して、 どこのフィールドの値が変更されたか? を確認する際に利用したい為です。 (確認時には、phpMyAdminツールなどで直接SQL文をたたいて実行予定です) 以上、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 条件によってレコードを取得したい

    Mysqlで以下のような条件のSQL文がわかりません。 hogeというフィールドの値に1があればそのレコードを取得 hogeに1という値のフィールド値をもったレコードがないならhogeが空のレコードを取得したいのですが方法がわかりません。 SELECT * FROM `tebleA` where (`hoge` = '1') or `postageFee_memId` = '' LIMIT 5 上のSQL文ではどうしても「`postageFee_memId` = '' 」のほうが優先されます。 (優先されるのはオートインクリメントIDが小さいから当然ですが・・) 「`hoge` = '1'」が絶対優先されるようにしたいのです。 いわゆる 「`hoge` = '1'」がない場合だけ「`postageFee_memId` = ''」が実行できればと思います。 ifとかを使って条件文をかけばいいのでしょうか? 足らずの情報があればおっしゃってください。 何卒ご教授お願いいたします。

  • 検索するレコードの件数について

    こんにちわ。 ハントと申します。 SQLで検索するレコードの件数について アドバイスを頂きたいのでよろしくお願い致します。 (質問内容) 検索するレコードが100件あるとします。 この内、50件を検索したいのですが、 うまく抽出できるSQLが思い当たりません。 (ROWNUMを使えばよいと思いましたが、ROWNUMが振られるのは ORDER BY の前であるので、  ORDER BYをした後に順番を振りたいのです。) どのようにSQLを組んだら抽出できるのかアドバイスをよろしくお願い致します。