2009-07-25 3 views
1

날짜 스탬프 E.g (1241037505)가있는 테이블이 있습니다. 조회수가 표시된 열이 있습니다.지난 7 일 동안의 최고 조회 선택

데이터 스탬프는 만들 때와 비슷합니다.

그래서 지난 주에 가장 많이 본 스레드를 선택하고 싶습니다.

어떻게하면됩니까?

답변

0
SELECT * FROM table WHERE Date_Created > (7 days ago value) ORDER BY Hits LIMIT 0,100 

하거나 (WishCow의 대답 당)이 사용할 수

SELECT * FROM table WHERE Date_Created > SUBDATE(NOW(), '7 day') ORDER BY Hits LIMIT 0,100 
+0

일 전의 가치는 무엇입니까? –

+0

@Ben Shelock (현재 가치) - (7 * 24 * 60 * 60). PHP에서 그것은() * (7 * 24 * 60 * 60) – Nathan

+0

당신은 그것을 계산해야합니다. PHP를 통해 시간() - 604800을 사용할 수 있습니다. –

1

현재 추적하고있는 데이터는 사용자가 선택할 수 있도록 않을 것입니다 지난 주에 본 상위. 그것은 당신에게 모든 시간에 걸쳐 본 상위 또는 지난주의에서 생성 된 가장 많이 본 항목을 보여줍니다. 지난 주에 무언가가 2 주 전에 생성되었지만 다른 어떤 것보다 많이 조회 된 경우 데이터를 추적하여 확인할 수 없습니다. 내가 볼 수있는 한 가지 방법은 각 콘텐츠 항목이 요일에 도달하는 횟수를 추적하는 것입니다. 당신은 콘텐츠 항목에 히트 수를 증가 할 때마다

create table daily_hits { 
    cid integer, -- content id points to the table you already have 
    dotw smallint, -- 0-6 or similar 
    hits integer 
    PRIMARY KEY (cid, dotw) 
} 

은 또한주의 주어진 콘텐츠 ID와 일에 대한 daily_hits 테이블을 업데이트합니다. 현재 날짜/시간을 요일로 변환하는 함수가 필요합니다. MySql은이 목적으로 DAYOFWEEK을 제공합니다.

가 가장 마지막 주에 조회하려면, 당신은 다음과 같이 조회 수 :

SELECT CID, SUM BY CID ORDER BY daily_hits 그룹에서 SUM (조회수) (조회수) DESC

당신이 필요합니다 자정에 현재 요일을 삭제하는 예약 된 작업의 일부 유형. 영원히 누적되지 않으며 본질적으로 현재 테이블의 히트 열에서 동일한 누적을 수행합니다.

+0

나는 그가 지난 주에 만들어진 톱 볼을보고 싶어한다고 생각한다. 그러나 나는 틀릴지도 모른다. –

+0

나는 그것에 대해서 조금 혼란스러워했다. 그가 가장 많이 본 것을 원했기 때문에, 나는 창조 된 시간이 적절하지 않다고 생각했다. 희망과 반대 방향을 선택했을 수도 있습니다. –

3

이 시도 :

SELECT * WHERE 
DATEDIFF(NOW(),created_date) < 7 
+0

그의 질문은 그의 시간 칼럼이 유닉스 타임 스탬프임을 지적했다. 네이티브 MySQL datetime 값으로 변환하기 위해서는 먼저 값에 FROM_UNIXTIME()을 호출해야합니다. – jason