2010-07-16 4 views
10

나는 ADDDATE 및 UPDATEDATE라는 두 개의 날짜가있는 테이블이 있습니다.
항목이 추가되면 ADDDATE는 현재 날짜이고 UPDATEDATE는 0000-00-00입니다.Mysql이 2 일자의 최신 항목을 주문하십시오.

나는 (최신) SQL 명령을 ORDER BY과 ADD는 =/2천10분의 6 (30), 업데이트 날짜 가장/이천십분의 일 12 UPDATE이다 = 예를 들어 그 2
의 가장 좋은 날짜를 얻을 필요 .

어떤 조언이 필요합니까?

답변

18

사용 GREATEST는 최신 날짜 찾을 수 있습니다 : 당신이 당신의 데이터베이스가 확장 성을 확인하려면

ORDER BY GREATEST(UPDATEDATE, ADDDATE) 
+0

타임 스탬프와 MySQL 날짜를 비교해야하는 경우 문제가 발생한 사람들을위한 팁, ORDER BY GREATEST (ADDDATE, FROM_UNIXTIME (UPDATEEDATE)) – Jdahern

9
ORDER BY IF(UPDATEDATE > ADDDATE, UPDATEDATE, ADDDATE) 
+0

NULL이 가능하고 null이 아닌 값이 반환되기를 원할 때이 방법이 GREATEST보다 효과적입니다. – MD004

6

하는 가장 좋은 방법은 삽입/업데이트 트리거와 함께 새 열 LATESTDATE를 추가하는 것입니다을하는 이를 예를 들어 greatest을 사용하여 두 개의 후보 필드 중 최신 필드로 설정합니다.

선택 항목에서 행 단위 기능을 실행하면 테이블이 커질수록 선택 속도가 매우 느려집니다. 테이블이 커짐에 따라 성능을 계속 유지하려면이 종류의 트릭이 일반적입니다.

날짜 중 하나가 중복되기 때문에 기술적으로 3NF를 위반하지만 성능상의 이유로 위반이 좋으며 ACID 속성을 유지 관리하기 때문에 트리거를 통해 열의 일관성이 유지되기 때문에 ACID 속성이 유지됩니다. 로 설정,

  • 가 새 열을 만듭니다

    난 내 머리 위로 떨어져 MySQL의 트리거 구문을 모른다 (I은 DB2 남자에게 자신을 해요)하지만 난 다음 할 것 적합한 기본값.

  • 변경 사항이 반영되도록 삽입/업데이트 트리거를 작성하십시오.
  • update TBL set ADDDATE = ADDDATE과 같은 쿼리를 사용하여 모든 행을 터치하면 트리거가 현재 행 모두에 대해 실행됩니다.

이 솔루션의 이점은 데이터베이스를 쿼리 할 때마다 계산 비용이 데이터가 변경되는 시간으로 이동한다는 것입니다. 이렇게하면 모든 읽기에 걸쳐 비용이 절감되어 더 효율적입니다 (테이블이 읽는 것보다 자주 쓰이는 매우 드문 짐승이 아닌 한).

테이블의 크기가 비교적 작 으면 필요하지 않을 수도 있음을 명심하십시오. 테이블이 정말 큰 환경에서 작업합니다.

+0

nice techique. 감사합니다. – ntan

관련 문제