人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perl + MySQLで質問です。

レコードの順番を変える方法はどのようにしたらよいでしょう?

例えば、
りんご,apple
ライオン,lion
バッタ,batta
パソコン,pasokon

という順番で入っているものを
ライオン,lion
りんご,apple
バッタ,batta
パソコン,pasokon

というふうに順番を入れ替えるようなSQLってありますか?

●質問者: pipi_n
●カテゴリ:ウェブ制作
✍キーワード:Apple MySQL Perl SQL りんご
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● m-nisi
●20ポイント

これは、今後データが増えていくものですか?

また、元のデータはどのような順で並んでいるのですか?

そして、並び替えたデータはどのような順ですか?

この3点を書いてくださると、教えられるかもしれません。

◎質問者からの返答

そうですね、情報が少なすぎました。

データは随時増えていきます。(上限は100件です)

一つ目のフィールドはユニークです。

基本的な並び順はレコードの後ろに追加していきます。

autoincrementはつけていません。

並び替えるデータは任意で何レコード目に入れるのか入力するようにしたいです。

これくらいの情報でわかりますでしょうか


2 ● Mook
●5ポイント

具体的な条件がでれば、また違った回答になるかもしれませんが、とりあえず、サンプルの後半の結果を出すための SQL でしたら、下記で出るかと思います。


SELECT japaneseName, englishName FROM tableDictionary ORDER BY CHAR_LENGTH( englishName),englishName;


tableDictionary というテーブルに、

日本語名のjapaneseName と

英語名のenglishName があると想定した例です。

◎質問者からの返答

すいません、説明不足でした。

文字数ではなく、任意の順番でした。


3 ● t-ueno
●34ポイント

1番のコメントを見る限り、並べる順番の条件は、「法則性はなく、任意に、好きな順番で」ということですね?

だとしたら、レコードに順番を表すフィールドを設けるのが一番ふつうなのではないでしょうか。

3番目のフィールドにそれを設けたとすると、


ライオン,lion,1

りんご,apple,2

バッタ,batta,3

パソコン,pasokon,4


とデータをセットして、「order by 3番目フィールド」って並べてやればよいですよね。

ライオンとりんごの間に新たに「バナナ」を挿入したい場合は、


ライオン,lion,1

バナナ,banana,2

りんご,apple,3

バッタ,batta,4

パソコン,pasokon,5


とデータをセットしなおすことで実現できます。

もしかして、フィールドの追加は反則かもしれませんが、ご要望を満たす(任意の好きな順に並べる)にはこれしかないですね。

データ挿入時の論理については、いろいろ、もっと効率の良い方法が考えられますが、たかだか100個単位のデータならば、これで十分でしょう。

◎質問者からの返答

なるほど。

やはり番号をふったやり方が一般的なのですね。

ただ、4番を1番に変更するときは全部の番号を入れ替えないといけないという手間はありますが

それくらいはしょうがないんですかね。


4 ● toohigh
●31ポイント

MySQL(というかDBMS全般)の世界に、あまりレコードの順番、という概念を期待しないほうが良いかと思います。

質問されている方の期待する内容にもよりますが、並び順専用の id みたいなカラムを作ってそこに値を入れていく形が良いかと思います。

で、実際に値を SELECT などで取ってくるときに ORDER BY する、という感じですね。

◎質問者からの返答

確かにレコードの順番やフィールドの順番は意識しないのがDBMSだ、というのは聞いたことがあります。

やはり番号ですね。

1番から順に全部表示したいときは番号でソート(ORDER BY?ASC)すればいいんですよね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ