アプリ版:「スタンプのみでお礼する」機能のリリースについて

レコードの順番

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

A 回答 (3件)

そのテーブルにに一意な番号を割り当てた後、お好みの順番に変えたらいかがでしょうか。



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;

あとは、プライマリーキーや他のインデックスがあれば、追加して、お引っ越し完了です。
    • good
    • 0

>レコードの行を一つ上にあげることは可能ですか?


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

>レコードの行を一つ上にあげる



SQLにおいて、レコードの表示順列はORDER BY で処理をする以外保証されていません。
したがってレコードを上げ下げするという処理自体がSQLにはありません。

ALTER TABLE `テーブル` ORDER BY `ソートするフィールド` DESC

のような処理で、ある程度の調整はできます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!