2011-12-22 1 views
0

좋아, 다음 열이있는 테이블이 있습니다.페이지 리비전에 대한 MySQL 쿼리

id | page_id | 버전 | gold_master

그래서 여러 개의 page_id가 있지만 그 중 하나만 gold_master가됩니다. 그러나 일부 행은 gold_master보다 높은 버전 번호를 가지지 만 골드 마스터는 아닙니다.

gold_master보다 버전이 높지만 gold_master가 아닌 모든 행을 선택하려면 어떻게합니까?

지금까지 나는 "황금의 주인이되지 마라."다른 비트의 부분이 나를 혼란스럽게합니다! pages 하나 실제로 컨텐츠를 보유하고 page_revisions 하나 :

+1

후 당신이 이미 가지고있는 일부 코드 : 귀하 실제로 쿼리는 다음과 같이 보일 것입니다. –

+0

잘하지만 그 cakephp에 그냥 쿼리 배열 ... – benhowdle89

+1

다음 몇 가지 샘플 데이터를 게시 :-) –

답변

1

당신은 내가 두 테이블이있을 것이다, 개인적으로이

SELECT * FROM your_table where version > (select version from your_table where gold_master=1) 
+0

우, 어쩌면. gold_master는 0 일 필요가 있다고 생각합니다. – benhowdle89

0

을 의미합니까.

귀하의 pages 표는 기본 ID와 또한 현재 개정 ID를 정의하는 것입니다. page_revisions 테이블은 페이지 제목, 컨텐트 및 페이지에 저장하려는 다른 데이터를 보유합니다. 이 테이블은 외래 키가 page_id이고 timestamp이므로 수정본이 언제 만들어 졌는지 확인할 수 있습니다. 이 테이블에는 고유 기본 키가 있습니다. page_revisions 테이블에는 주 ID가 기본

, 당신은 다음 revision_idpages 테이블이 사용할 수 있습니다. 따라서 최신 버전은 최신 개정판이 아닐 수 있습니다. revision_id을 이전 버전으로 설정할 수 있습니다.

바라건대 말이 되네. 그렇지 않으면 알려주세요.

편집 :

SELECT p.id, r.title, r.content, r.created 
FROM pages p 
LEFT JOIN page_revisions r 
ON p.revision_id = r.id 
WHERE p.id = 1 
LIMIT 1