2012-03-01 6 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 

정렬입니다 날짜는 알파벳순으로 다음입니다.

내가 원하는 363,210

은이 ..

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

날짜와 시간도에 의해 정렬

...

+2

무슨 말을 당신이 원하는 것은 내림차순으로하지 않습니다 ... –

+0

컬럼의 정의'무엇을 updated_at'입니까? –

+0

날짜와 시간으로 너무 짧게하고 싶습니다 ... –

답변

57

, 당신은 하위 쿼리가 필요합니다

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 

사용해보십시오. 당신이 오름차순으로 정렬 지난 5 개 행을 원하는 경우

+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 
관련 문제