2011-08-25 6 views
1

내가 가지고 모듈이 특정 기준의 그룹을 사용하여 데이터의 목록을 표시 할 필요가있는 프로젝트 : 데이터베이스 테이블로 데이터 유형을 가진 날짜 필드를 포함SQL WHERE에 이르기까지에 대한 날짜 절 계산

Today 
Week 
Month 
Year 

을 BIGINT (10) 그리고 PHP 코드를 통해 time() 함수 값을 삽입합니다. 어떤 값을 삽입합니까 1311144077,

이제 위의 레이블에 따라 테이블에서 레코드를 가져와야합니다. 어떻게 할 수 있습니까?

+0

/한 strtotime() 함수는, 예를 들어 시작 시간 오늘 : strtotime (날짜 ("Ymd")) 등 – XzKto

답변

5

에포크 타임 스탬프 형식으로 datetime을 저장하는 동안 MySQL 날짜/시간 함수를 사용하는 솔루션이 매우 느릴 수 있다고 생각합니다. 그래서 아래의 코드처럼 타임 스탬프 자체를 사용하는 것이 좋습니다.

사용 예 쿼리에서

$t = time(); 

# today 
echo date('Y-m-d H:i:s', strtotime('today', $t))."\n"; 
echo date('Y-m-d H:i:s', strtotime('tomorrow', $t))."\n"; 

# this week 
echo date('Y-m-d H:i:s', strtotime('-1 sunday', $t))."\n"; 
echo date('Y-m-d H:i:s', strtotime('sunday', $t))."\n"; 

# this month 
echo date('Y-m-d H:i:s', strtotime(date('Y-m-01 00:00:00', $t)))."\n"; 
echo date('Y-m-d H:i:s', strtotime(date('Y-m-01 00:00:00', strtotime('next month', $t))))."\n"; 

# this year 
echo date('Y-m-d H:i:s', strtotime(date('Y-01-01 00:00:00', $t)))."\n"; 
echo date('Y-m-d H:i:s', strtotime(date('Y-01-01 00:00:00', strtotime('next year', $t))))."\n"; 

# this year 
$start_of_year = strtotime(date('Y-01-01 00:00:00', $t)); 
$end_of_year = strtotime(date('Y-01-01 00:00:00', strtotime('next year', $t))); 
$query = "SELECT * FROM sometable WHERE somecolumn >= $start_of_year AND somecolumn < $end_of_year"; 
쉽게) (PHP의 날짜 등이 날의 타임 스탬프, 주를 시작 계산할 수
+0

Quik 쉬운 Iqez에 대한 설명적인 답장 –

0

strtotime() 기능을 사용하면 하한 타임 스탬프를 얻을 수 있습니다 (예 : strtotime()). strtotime('-1 week')을 입력 한 다음 데이터베이스에서 날짜 필드 값이 더 큰 모든 레코드를 쿼리하십시오.

예 : 오래되거나 새로운 주되는 행을 얻으려면, 당신은 할 수 있습니다 : 당신은 월별로 그룹이 필요한 경우, 당신은 단지 MySQL functions for processing dates을 사용할 수 있습니다

$ts = strtotime('-1 week'); 
// or $ts = strtotime('date'); where date can be a date in Y-m-d format 
mysql_query("SELECT * FROM table WHERE your_bigint_column >= $ts"); 

:

SELECT WEEK(FROM_UNIXTIME(your_bigint_column)) AS no_of_week, count(*) 
FROM table 
GROUP BY WEEK(FROM_UNIXTIME(your_bigint_column)) 

를 관련이없는 일 주 - BIGINT (10)은 잔인한 것이므로, time()의 결과는 INT 열에 안전하게 저장 될 수 있습니다.

+0

당신의 영혼을 얻지 못했습니다 –

+0

지금은 더 나아 졌으면 좋겠습니까? 그렇지 않다면 성취하려는 것에 대한 자세한 내용을 알려주십시오. – Crack

0

이 명령은 데이터베이스 날짜 ("j F, Y", "1222041600")에 저장된 시간 소인을 1-6-1987로 변경합니다. 그런 다음 달과 일을 갖게되며 이에 따라 주도 계산할 수 있습니다. 자세한 내용은 날짜의 php 함수를 참조하십시오.