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

PHP+mySQLで、DBからある順序で情報を取り出す方法(SELECT ORDER BY)で困っています。

●テーブル情報
create table sample (
no int NOT NULL auto_increment,
data varchar(16),
time timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (no)
);

●動作結果
INSERT INTO sample (data) VALUE ("***")

no data time
------------------------------
1 "test1" 2012-05-02 17:26:03
2 "test2" 2012-05-02 17:26:03
3 "test3" 2012-05-02 17:28:26
4 "test4" 2012-05-03 13:30:42

●質問事項
上記DBからdataを以下の順序で取り出したいのですが、よい方法が思いつきません。

条件1) 時刻(time)の新しい順
条件2) 時刻(time)が同じであれば、noの小さい順

「動作結果」の場合、下の順序で取り出しできることが期待値です。

no data time
------------------------------
4 "test4" 2012-05-03 13:30:42
1 "test1" 2012-05-02 17:26:03
2 "test2" 2012-05-02 17:26:03
3 "test3" 2012-05-02 17:28:26

これをmySQLの文法だけでなんとかできないかというのが質問です。
たとえば以下の方法だと、期待値となりません。

SELECT data FROM sample ORDER BY time DESC, no

no data time
------------------------------
4 "test4" 2012-05-03 13:30:42
1 "test1" 2012-05-02 17:26:03
2 "test2" 2012-05-02 17:26:03
3 "test3" 2012-05-02 17:28:26

よろしくお願いいたします。

●質問者: cochoo
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●100ポイント ベストアンサー

質問の文面だと、「期待値」と「期待通りになりません」が同じ並びになってますが、
4 → 3 → 1 → 2 の順で取りだしたい、ということですよね。

http://sqlfiddle.com/#!2/aa68b/1
↑は、SQL Fiddle というサイトで試した結果です。
選択列を data から * に変えただけですが、期待通りの結果になってるように思えます。


cochooさんのコメント
ご回答ありがとうございます。 > 「期待値」と「期待通りになりません」が同じ並びになってますが、 「期待とおりになりません」の例が誤記です。大変申し訳ありません。 > 4 → 3 → 1 → 2 の順で取りだしたい、ということですよね。 取り出したい順序は、4→1→2→3です。 いろいろご丁寧に対応いただいて恐縮ですが、再度のご教授をお願いいたします。

cochooさんのコメント
自己解決しましたので、これで質問を終了させていただきます。 みなさま、ありがとうございました。

2 ● きゃづみぃ
●100ポイント

time って 年月も含んでませんか?

2012-05-03 13:30:42

これ自体が timeなら 期待値どおりには ならないですね。


きゃづみぃさんのコメント
というか dataに みんな含んでいるような感じがしますが。

cochooさんのコメント
ご回答ありがとうございます。 No.1さんのご指摘通り、「期待とおりになりません」の例が私の誤記です。大変申し訳ありません。 取り出したい順序は、4→1→2→3です。 timeの型がtimestampなのですが、これではORDERBYできないということでしょうか?ちょっと調べてみます。ありがとうございました。

きゃづみぃさんのコメント
timestamp で 日付も含まれてる?
関連質問

●質問をもっと探す●



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