2014-05-10 2 views
0

우선, 죄송합니다, 지금은 MySQL에 좋지 않습니다.두 테이블에 JOIN이있는 MySQL 카운트

wp_posts 

id | date     | parent_id 
161 | 2013-08-28 13:53:48 | 160 
160 | 2013-07-28 13:53:48 | 0 
159 | 2013-04-28 13:53:48 | 158 
158 | 2013-02-28 13:53:48 | 0 

나는 날짜가 문제 2013입니다 게시물에 대한 모든 page_nums의 합을 알고 싶어이 일을한다는 것입니다 :

post_meta 

id | post_id | page_num 
4 | 161  | 14 
3 | 160  | 9 
2 | 159  | 3 
1 | 158  | 16 

그리고 :

나는 2 개 테이블을 가지고있다 단일 게시물에 부모 게시물에서 parent_id가있는 다른 게시물이 있습니다.

이 예제에서 id 160은 wp_posts의 상위 게시물이며 id 161 인 하위 게시물을 갖습니다. 그러나 동일한 단일 게시물입니다.

post_meta의 page_num은 각 게시물의 post_id를 자식으로 가지고 있습니다. 이 경우에는 최신 160 및

159 그래서 난 단지에만 page_nums 최신 (최신) 아이가을 게시에 대한 요약 할 필요가 상위 게시물에 저장되어 있기 때문에 그 post_meta에서 ID 4 및 2 것 . 지금까지 시도

내 (아주 나쁜) :

COUNT pagenum FROM wp_postmeta a WHERE wp_postmeta b post_id.b = parent_id.a AND DATE LIKE='2014' GROUP BY parent_id.b 

을 당신이 문제를 이해 바랍니다. 사전에 도움을

감사

안부

+0

이 중첩이 얼마나 깊을 수 있습니까? 자녀가 자녀를 가질 수 있습니까? – VMai

+0

아니요. x-childpost가 있지만 항상 "grand children"이없는 것은 1 개의 게시물입니다. 때마다 당신은 첫 번째 (부모) 문서의 parent_id와 자식 문서를 얻을 것입니다 wordpress 기사를 업데이 트하십시오. –

+0

좋은 소식입니다. 그러나 어느 날이 부모의 날 또는 가장 어린 자녀의 날이 될 것입니까? – VMai

답변

1

만 아이의 한 레벨/당신은 자녀가없는 한) 부모를 잡아 다음과 같이 사용할 수 있습니다 부모 관계가있는 경우 2) 최신 아이

SELECT meta.* 
FROM post_meta meta 
INNER JOIN 
(SELECT parent.id FROM wp_posts parent  -- parent without child 
WHERE YEAR(date) = 2013 
     AND parent_id = 0 
     AND NOT EXISTS (SELECT 1 FROM wp_posts child 
        WHERE child.parent_id = parent.id) 
UNION 
SELECT max(id) FROM wp_posts    -- latest child 
WHERE YEAR(date) = 2013 
AND parent_id > 0 
GROUP BY parent_id 
)posts 
ON posts.id = meta.post_id 

sqlFiddle

그룹화를 사용하여 각 부모의 그런 다음를 사용하여 PAGE_NUM 요약 할 수 있습니다 위의 쿼리는이 당신이 max(date)를 잡아해야하는 경우가 아닌 경우 idwp_posts 테이블이하는 최신 날짜에 대한 가장 큰이 될 것이라는 가정을하고, idsqlFiddle

주처럼콤비네이션과 같은 최신 항목을 찾습니다. 너무 복잡해서는 안됩니다.

또한 자녀가없는 게시물의 경우를 테스트하기 위해 자녀가없는 항목 162를 추가했습니다. 이것이 page_num의 합이 17 대신 18 인 이유입니다.

관련 문제