2012-12-21 4 views
8
에서 MySQL의 결과를 얻기 가능한 중복

: 나는 지난 30 일에서 데이터베이스의 행을 계산하는 데 사용하는 일부 PHP 코드를
Get from database but only last 30 days지난 30 일

안녕 . 문제는 번호가 -30에서 -20으로 변경되도록 코드 조각을 변경하면 출력 번호가 272에서 360으로 이동하는 대신 감소하는 것입니다.

$result = mysql_query("SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) = -30 and member ='000002'"); 
$num_rows60 = mysql_num_rows($result); 
+0

전체 설명과 같은 질문 http://stackoverflow.com/questions/13912035/display-record-older-than-3-months-in-sql/13912197#13912197 – softsdev

+0

* 정확하게 * 30 인 레코드를 선택하고 있습니다. 또는 20 일. – JJJ

답변

15

이 올해는 예를 들어 아래 참조, 일간이

select * from `table` where `yourfield` >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) 

을보십시오.

아난드 들어
DATE_SUB(CURDATE(), INTERVAL 15 DAY) /*For getting record specific days*/ 

DATE_SUB(CURDATE(), INTERVAL 1 YEAR) /*for getting records specific years*/ 


, 쿼리

BETWEEN DATE_SUB(CURDATE() ,INTERVAL 6 MONTH) AND DATE_SUB(CURDATE() ,INTERVAL 3 MONTH) 
/* For Getting records between last 6 month to last 3 month 
+0

와우 아주 좋았어요 완전히 설명했습니다 –

+0

감사합니다. 당신의 설명은 제가 차이점을 이해하고 어떻게해야 하는지를 이해하게 도와주었습니다.완벽한 감사 –

2

대신이를 사용할 수 있습니다 : 여기

코드입니다

$result = mysql_query("SELECT * FROM all_count WHERE `date`< DATE(NOW() - INTERVAL 30 DAY) and  member ='000002'"); 
+0

그 덕분에 완벽하게 감사했습니다 –

0

당신이 문서 here에서 볼 수 있듯이, MySQL의에서 DATEDIFF 기능은 당신의 일의 차이를 알려줍니다 첫 번째 데이트에서 두 번째 데이트.

쿼리는 30 일 전까지의 차이가 아닌 모든 행을 선택합니다. 따라서 20 일 전의 날짜 행 수가 30 일 전보다 더 높다는 것은 완전히 가능합니다. 당신이 가장 가능성이 원한이었다

SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) >= -30 and member ='000002' 
4

그것은

`date`< DATE(NOW() - INTERVAL 30 DAY) 

보다는 첫 번째 경우에

DATEDIFF(date,NOW()) = -30 

비교하는 것이 좋습니다, 날짜 C 쿼리는 쿼리의 시작 부분에서 한 번만 수행되며 데이터베이스는 날짜 열의 모든 인덱스를 사용할 수 있습니다.

두 번째 쿼리는 모든 행에서 DATEDIFF을 계산해야하며 데이터베이스는 인덱스를 사용할 수 없습니다. 두 번째 쿼리는 전체 테이블 스캔을 강제 실행합니다.

또한 칼럼을 date으로 부르지 않기를 강력히 제안합니다. 예, 저는 백틱으로 그 이름을 인용 할 수 있다는 것을 압니다. 그러나 그것은 지저분한 것입니다. 그리고 잊었을 때 구문 오류는 잊기 힘들 것입니다. 칼럼에 대해 더 알기 쉬운 이름을 지정하십시오. 어떤 종류의 날짜입니까? 날짜는 무엇을 나타내는가?

관련 문제