- - PR -
レコードの順序(MYSQL)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-08 13:57
こんにちは。
MYSQLを使用しているのですが、INSERT文で登録した順序のとおりに レコードをセットしたいのですが、どうすればいいか教えてください。 現在は、KEYを「5,4,3,2,1」と登録しても SELECT文で抜くと「1,2,3,4,5」と読み出されてしまいます。 カラムはひとつしか(KEYのみ)ありません。 | ||||
|
投稿日時: 2004-12-08 14:28
select * from table order by KEY desc;
後は、日時(datetime型)フィールドを造って、日付順に order by とか。 | ||||
|
投稿日時: 2004-12-08 14:33
すみませんが逆に質問させてください。
なぜ、データ登録順に表示させたいのでしょうか。 データベースを使用する以上、あなたはデータを物理的にどのように格納するかをデータベースに丸投げしているのです。そのかわり、データベースは単なるシーケンシャルアクセスでは効率が悪いデータ検索・更新処理をあなたに提供するのです。検索で返ってくる順番がデータ登録順でないとしても、それはデータベースが悪いのではなく、登録順を保持できるようなテーブル構造を設定しなかったあなたの責任です。 | ||||
|
投稿日時: 2004-12-08 14:36
ソラさん、こんにちは。
レコードの表示順は ORDER BY 句で指定します。「登録順」に並べたいなら、登録日時を格納するカラムを追加して、デフォルト値なりトリガなりを使用して現在時刻を放り込めばOKでしょう。 MySqlを知らないので、もしかしたら「ORDER BY指定がない場合は登録順に表示する」というようなオプションがあるのかも知れませんが、そういうものに頼ってしまうと、他のDBで仕事が出来なくなってしまいます(ってのは大袈裟か)。 【追記】 モロ被り…。 [ メッセージ編集済み 編集者: きくちゃん 編集日時 2004-12-08 14:46 ] | ||||
|
投稿日時: 2004-12-08 14:50
すいません。質問の書き方が悪かったようです。
登録順というのは、「3,2,4,1,5」なら「3,2,4,1,5」と言う順番で 抜き出したいと言うことです。このばあい、ORDER BYではダメですよね? なぜ、登録順かというと、順番待ちのテーブルを作りたかったのです。 順番がきたら、そのKEY番号(ID)をもつ別のテーブルのレコードを処理し、順番待ちからはレコードを削除すると言うことをしたいのです。 また、順番待ちをキャンセルすることも考慮すると、登録順にシーケンシャルなものが使えないかなぁ。とおもい、KEY項目だけのテーブルで登録順に抜き出せばいいか。と思ったからです。 AUTO_INCREMENTの項目を別に作り、そっちをKEYとすればよいのでしょうか? AUTO_INCREMENTで、1,2,3,4,5,,,となっているところで、たとえば、「3」を削除した場合、次のAUTO_INCREMENTは、「6」になるのでしょうか? DBが気を利かして欠番の「3」を使用するとちょっとまずいんですが・・・。 やってみます。 | ||||
|
投稿日時: 2004-12-08 15:08
私はMySQLに詳しいわけではないですが、
AUTO_INCREMENTを使うよりも、DATETIMEの列を追加したほうが良いのでは? 連番で実現する場合、最大値に達したらどうするか?って事を考慮しなければならないので。 | ||||
|
投稿日時: 2004-12-08 15:30
キューを実装するのに、DATETIME型しか付けないのは問題です。DATETIME型には同じ時刻が入ってしまいますからね。ステートメント実行中 NOW() は常に同じ値を返すので、たとえば、一気に 10行挿入すると、時刻はすべて同じになってしまいます。 基本的には自動連番を主キーとし、参考情報として時刻を落とす。もしくは、自動連番 + 時刻の複合主キーにすることをおすすめします。 |
1