2012-03-01 16 views
30

すべて 特定のIDに対して最後に入力した5個のデータを表示します。 私のSQLクエリは日時を降順でソートしていますか?

SELECT id, name, form_id, DATE(updated_at) as date 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY updated_at DESC 

updated_atはDATETIME

それはない時間で日付で、最後の5エントリーの並べ替えを表示している、です。同じ日付でアルファベット順にソートされています。

が思う私は差分時間と同じ日付の3つの項目を持っている

はのは、私が得たもの上記のクエリ

を照会した後

Ajay 1/3/2012 1:15 
John 1/3/2012 1:00 
Bony 1/3/2012 1:10 

を言わせては

Ajay 1/3/2012 1:15 
Bony 1/3/2012 1:10 
John 1/3/2012 1:00 

並べ替えですアルファベット順の日付の後に

私が欲しいもの

があるこの...

John 1/3/2012 1:00 
Bony 1/3/2012 1:10 
Ajay 1/3/2012 1:15 

日付と時間も順

...

+2

あなたが欲しいと言う何列 'updated_at'の定義は何ですか...降順で –

+0

ではないでしょうか? –

+0

日付と時刻で短くしたいです... –

答えて

57

あなたが昇順に並べられ、最後の5行を、したい場合は、サブクエリを必要とする:

SELECT * 
FROM 
    (SELECT id, name, form_id, DATE(updated_at) AS updated_date, updated_at 
     FROM wp_frm_items 
     WHERE user_id = 11 
     AND form_id=9 
     ORDER BY updated_at DESC 
     LIMIT 5 
    ) AS tmp 
ORDER BY updated_at 

10回目のための質問を読んだ後、これはあなたが望むもの(もしかしたら)であってもよいです。日付の降順で注文してからの時間(同じ日に)昇順による順序:

SELECT id, name, form_id, DATE(updated_at) AS updated_date 
FROM wp_frm_items 
WHERE user_id = 11 
    AND form_id=9 
ORDER BY DATE(updated_at) DESC 
     , updated_at ASC 
+1

それが彼が望むならば、そのクエリを行うのではなく、アプリケーションの結果を逆にする方がはるかに良いでしょうか? –

+0

@MatthewScragg:返された行が5行だけで、問題はないと思いますが、どちらも大丈夫です。 –

+0

最後の5または10はここでは問題ではありません。 –

2
SELECT id, name, form_id, DATE(updated_at) as date 
FROM wp_frm_items 
WHERE user_id = 11 && form_id=9 
ORDER BY date ASC 

は "DESC" は降順を意味していますが昇順( "ASC")を必要とします。

2
SELECT * FROM (
       SELECT id, name, form_id, DATE(updated_at) as date 
       FROM wp_frm_items 
       WHERE user_id = 11 && form_id=9 
       ORDER BY updated_at DESC 
      ) AS TEMP 
    ORDER BY DATE(updated_at) DESC, name DESC 

試してみてください。

+1

@NoobASThreeDeveloper:いいえ、それは不要です。列内の日付だけでなく、時間もあります。ほとんどの場合、レコードは同じ日付と時刻を持つことはできません。したがって、ステップは必要です –

+0

@Click:ステップは本当に不要です。これをサブクエリで囲む必要はありません。単純な 'ORDER BY DATE(updated_at)DESC、名前DESC'は同じ結果を持ちます。あなたが持っている構文が有効なSQLではないことは言うまでもありません(MySQLが許可しているにもかかわらず)。外部クエリには 'updated_at'がなく、' ORDER BY DATE(updated_at) 'はエラーになるはずです。 –

+0

@ypercube:これを行うと、レコードは 'TIME'でもソートされません。 OPはレコードを日付と時刻の両方でソートすることを希望しています –

1

あなたが名前

SELECT id, name, form_id, DATE(updated_at) as date 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY updated_at DESC,name ASC 

によって最初に日付でソートする意味場合これは、日付でレコードをソートします最初に名前をつけて

16

を入れて、UNIX_TIMESTAMPを入れます。

SELECT id, NAME, form_id, UNIX_TIMESTAMP(updated_at) AS DATE 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY DATE DESC 
1

これは日によって、レコードをソートする最も簡単な方法の一つである:

SELECT `Article_Id` , `Title` , `Source_Link` , `Content` , `Source` , `Reg_Date`, UNIX_TIMESTAMP( `Reg_Date`) AS DATE 
FROM article 
ORDER BY DATE DESC 
関連する問題