2009-09-29 4 views
4

지난 7 일 동안 생성 된 행을 테이블에서 선택하는 가장 좋은 방법은 무엇입니까?지난 7 일 동안 행을 선택하는 최적의 방법은 무엇입니까?

MySQL에는 수십 개의 시간 및 날짜 함수가 있으며 가장 쉬운 방법은 무엇인지 혼란스러워합니다.

이 질문을 위해 "my_table"이라는 테이블이 있고 DATETIME 인 "created_at"행이 있다고 가정하십시오.

SELECT * FROM my_table WHERE ... 

WHERE 절을 어떻게 기입 하시겠습니까?

+0

음,이 작업을 수행하는 방법은 여러 가지가 있습니다. 그러나 언어를 사용하여 쿼리를 작성하면 일부 사항이 변경됩니다. –

+3

@brandon, 실제로는 앱 계층이 아니라 데이터베이스를 사용해야합니다. –

+3

똑같은 일을하는 많은 방법. 너무 커뮤니티! –

답변

14
WHERE DATEDIFF(NOW(), created_at) <= 7; 

도움이 될 것입니다

+0

이봐,이게 맘에 들어. :) 아주 간단하고 깨끗해. :) –

+1

@Drew .. 내가 틀렸어.하지만 쿼리가 먼저 모든 created_at 레코드를 변환하고 나중에 일치하지 않을거야? 그 오버 헤드가 그 다음 다른 방법으로 경기를하고 있지 않습니까? –

+0

@Sab : 당신이 옳다고 생각합니다. 특히'created_at'에 인덱스가 있다면 (리차드 맞죠?). 확실히 최적화 프로그램의 수명을 더 어렵게 만들지 만 그것을 극복하는지 여부를 벤치마킹해야합니다. –

12
...WHERE created_at >= Date_Add(now(), INTERVAL -7 DAY) 

이것은 분명하기 때문에 이것은 내가 선호하는 방식입니다. 그러나 도 괜찮습니다. 또한 명확하게하기 위해 INTERVAL 양식을 사용할 수 있으며 기본값은 며칠이므로 다른 사람들이 떠나는 것을 볼 수 있습니다. 즉 각 행에 created_at에 대한 계산을 필요로하기 때문에 당신은하지이 created_at에 계산을하고 now()과 비교 싶어 수정되지 않은 created_atnow()을 수정하고 비교하는 반면, MySQL의 의미, (MySQL의 가정은 그것을 최적화하지 않음) 그 비트를 한 번 사용하고 행을 비교할 때 인덱스를 언급하지 않고 결과를 사용합니다. created_at이> = DATE_SUB (CURRENT_DATE, INTERVAL 7 DAY)

잘하면 그게 읽기 때문에 나는 그것을 좋아하지

+2

와우, 'Date_Add'에서 누락 된 밑줄을 아무도 눈치 채지 못했다고는 믿을 수 없습니다. 나는 ... * 추가 ​​했어. ;-) –

2
WHERE ADDDATE(datefield, 7) > NOW(); 
4

... "어디 지금과 생성 된 날짜의 차이는 최대 7 일입니다. " 내 자신의 머리 MY_TABLE FROM

2
SELECT * FROM my_table 
WHERE DATE(created_at) >= SUBDATE(DATE(NOW()), 7) 
+0

이것은 나를 위해 일했다 :) –

1

SELECT *에 WHERE my_table.datefield> SYSDATE - 7

관련 문제