• ベストアンサー

レコードの登録順がおかしい

レコードをinsertで登録した場合、selsect * from で見ると普通最終行に反映されるものなんですよね? それが現状、最終行の一行前だとか、続けて登録すると最終行になったり、その次の登録はn行前になったりと統一性がなく困ってます。 このようになってしまう原因と解決法をご存じでしたらご教授願えませんでしょうか。 当方、MySQL3.22.32-2を使ってます。

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

よくあるのは、間のデータを削除した場合に、その場所に新しく書き込むものが入るパターンですね。 SQLはデータの保存を効率よくするために、書き込みの順番という概念はありません。 順番に並べたい場合は#1の方がおっしゃるように、どこかで順番を保存して、それをソートすることになります。 例えば、 select * from table order by A というようになります。

izukunzo
質問者

お礼

回答ありがとうございます。 間のデータ、確かに消しました。 なるほどー。納得しました。(^-^) order by、試してみたところ、ちゃんと順番に表示されました。 今後はorder byで確認するようにします。 ご教授ありがとうございました。

その他の回答 (1)

  • blader318
  • ベストアンサー率52% (23/44)
回答No.1

>普通最終行に反映されるものなんですよね? そんな風に決まってはいません。 select * from と出力順の指定を何も付けずに検索した場合の検索結果には、登録順に出力されるという保証はありません。登録順に出力したいのであれば、通常は、レコードの登録日時をカラムとして持っておいてそれでソートを行います。

izukunzo
質問者

お礼

回答ありがとうございます。 保証はないのですか・・・ 勉強になりました。 さらに質問なのですが、ここ2カ月、select * fromで登録順に表示されていたものが(一日一件登録、毎日最終行に例外なく反映されていた)、ある日突然(本日)最終行のn行前とかに表示されてしまうのはちょっと???です。 2カ月前から、レコードの登録日時としてvarchar属性で050922_0930のように入力していますが、一度としてそれでソートをかけたことはなく、select * fromで登録(日時ではなく)順に表示されていました。 これの原因はなぜなのでしょうか? 宜しくお願い致します。

関連するQ&A