2016-08-18 3 views
0

외부 응용 프로그램에서 범주별로 가장 최근에 게시 된 5 개의 WordPress 게시물을 가져오고 싶습니다. 이러한 응용 프로그램은 ASP.NET에서 빌드되므로 EF를 사용하여 MySQL-Database에서 직접 데이터를 가져 오려고합니다. EF에서 WordPress 관계를 구축하는 것은 끔찍한 것처럼 보입니다. 따라서 가장 최근 게시물에 대한 카테고리 세부 정보와 정보를 보유한 사용자 정의 모델을 만들고 싶습니다.카테고리에서 가장 최근 5 개의 WordPress 게시물

Select terms.term_id As Id, terms.name As Name, terms.slug As SeoName, Group_Concat(relations.object_id) As PostId, taxonomy.count As Count, taxonomy.parent As ParentId, 
(
    Select post_title 
    From wp_posts 
    Where ID In(Group_Concat(relations.object_id)) 
    Order By post_date Desc 
) As PostTitle 
From wp_terms terms, wp_term_taxonomy taxonomy, wp_term_relationships relations 
Where terms.term_id = taxonomy.term_id 
And relations.term_taxonomy_id = taxonomy.term_taxonomy_id 
And taxonomy.taxonomy = 'category' 
Group By terms.term_id 

내 생각은 내가 5를 얻을 Having Count(terms.term_id) = 5을 추가했다 :

그래서 나는 작동하는 SQL 쿼리를 작성,하지만 때문에 aggregative 그룹으로는 카테고리마다 나에게 한 행 (게시물) 준으로 카테고리 당 행 수 하지만 작동하지 않아 빈 결과가 나타납니다. Having이 없으면 가장 최근 게시물이있는 범주 당 한 줄을 얻습니다.

그룹핑을 제거하지 않고 MySQL이 카테고리 당 5 개의 행을 반환하도록하려면 어떻게해야합니까?

가 그럼 난 (짧은) 데이터베이스에서 다음과 같은 결과를 얻으려면

  • CATA
  • CatB
  • CATC :

    내가 나무 종류가 있다고 가정하자

    CategoryId | CategoryName | NewestPostTitle 
    
    1   | CatA  | Newest post in CatA 
    1   | CatA  | Second newest post in CatA 
    ... 
    2   | CatB  | Newest post in CatB 
    2   | CatB  | Second newest post in CatB 
    ... 
    3   | CatC  | Newest post in CatC 
    3   | CatC  | Second newest post in CatC 
    
+0

원하는 경우이 간단한 두 단계 과정을 따르십시오. 1. 아직 수행하지 않은 경우 문제를보다 쉽게 ​​복제 할 수 있도록 적절한 CREATE 및 INSERT 문 (및/또는 sqlfiddle)을 제공하십시오 . 2. 아직 수행하지 않았다면 1 단계에서 제공된 정보와 일치하는 원하는 결과 세트를 제공하십시오. – Strawberry

+0

왜 카테고리를 반복하지 않고 간단한 WP_Query (또는 get_posts()를 사용하여 각 반복마다 게시물을 쿼리하지 않습니까?))? –

답변

0

왜 b를 사용하지 않습니까? 워드 프레스 함수에 uilt? 나는 그것을 테스트 한 다음 코드를 시도하고 내 테스트를 위해 잘 작동하십시오

$categories = get_categories(); 

/* echo '<pre>'; 
print_r($categories); 
echo '</pre>'; */ 

foreach($categories as $category){ 
    $args = array(
     'posts_per_page' => 5, 
     'cat' => $category->term_id, 
     'orderby' => 'ID', 
     'order' => 'DESC' 
    ); 

    $query = new WP_Query($args); 

    echo $category->name . '<hr />'; 

    while($query->have_posts()):$query->the_post(); 
     echo the_title() . '<br />'; 
    endwhile; 
} 

편집 : 난 당신이 외부 응용 프로그램에서 이것을 사용하고 싶었 실현 didnt한다. 내가 제공 한 코드를 사용하여 결과를 배열이나 json 형식으로 반환하는 페이지 템플릿을 만들 것입니다.

또한 데이터를 가져오고 그로부터 구축하기 위해 검색어를 사용하여 에코를 표시 할 수도 있습니다. $ query-> request를 출력하면된다.

잡아 비아 워드 카테고리 목록 : 결과 사이

SELECT t.term_id AS id 
FROM wp_terms t 
     LEFT JOIN wp_term_taxonomy tt 
       ON t.term_id = tt.term_id 
WHERE tt.taxonomy = 'category' 
ORDER BY name 

루프 및 term_id 최신 5 개 항목을 잡아 :

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND (wp_term_relationships.term_taxonomy_id IN (5)) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.ID DESC LIMIT 0, 5 

루프에서 각각의 ID와 wp_term_relationships.term_taxonomy_id IN (6) 바꾸기.

관련 문제