2012-05-04 9 views
1

のJOIN:は、私はMySQLで次のクエリをやってる

SELECT wp_posts.post_date, wp_posts.post_content, wp_posts.post_title, wp_posts.ID, wp_terms.name, wp_term_taxonomy.taxonomy 
FROM wp_posts 
LEFT JOIN wp_term_relationships ON (wp_term_relationships.object_id = wp_posts.ID) 
LEFT JOIN wp_term_taxonomy ON (wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id) 
LEFT JOIN wp_terms ON (wp_terms.term_id = wp_term_taxonomy.term_id) 
WHERE 1=1 
AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'publish') 
ORDER BY wp_posts.ID DESC 
LIMIT 50 

これは予想通り50件の結果を返します。しかし、「用語」あたり「ポスト」の数に依存し、この不確定な数の「投稿」を意味します。

は、どのように私は私が25ユニークwp_posts

WHERE 1=1 
AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'publish') 

を得るように、それを制限する。しかし、私は参加しwp_termsに関して必要な数の行を返すことができますか...?

ありがとうございます!

+0

「select文」で「一意/別名」の作業はありますか? – sarwar026

答えて

0

LEFT結合のために、特定のIDに対して複数のエントリが存在する可能性があります。あなたの投稿から事前クエリを行います。左結合として適格である最新の25個のIDはオプションです。 ID。これを25に制限します。これで、ORDER BYをJustLast25.IDに適用すると、順番に割り当てられたエントリが順番に配置されます。したがって、あなたの25のIDは200のエントリを生成する可能性がありますが、IDごとに1,2,3などのシーケンスが割り当てられます。

これですべてがラップアップされ、50レコードの制限はありますが、すべてのIDが確実に保持されていることを確認するには、そのIDから再クエリする必要がありますが、順序をFIRSTの順に変更してからIDを入力すると、 3rd、etc ...いくつかはエントリを持たないかもしれませんが、最低限、それらはリストに一度含まれます。複数を有するものについては、その追加のレコードは、あなたがそれらすべてが自分の順番資格の投稿の隣にあるすべてのレコードをグループ化する場合は、あなたがする必要があります、最初の実行今

select 
     PreQualify.* 
    from 
     (SELECT 
       JustLast25.post_date, 
       JustLast25.post_content, 
       JustLast25.post_title, 
       JustLast25.ID, 
       wp_terms.name, 
       wp_term_taxonomy.taxonomy, 
       @lastSeq := if(@lastID = JustLast25.id, @lastSeq +1, 1) as SeqPerID, 
       @lastID := JustLast25.ID 
      FROM 
       (select @lastID := 0, @lastSeq := 0) sqlvars, 
       (select wp_posts.* 
        from wp_posts 
        where wp_posts.post_type = 'post' 
         AND wp_posts.post_status = 'publish' 
        ORDER BY 
         wp_posts.ID DESC 
        LIMIT 25) JustLast25 

       LEFT JOIN wp_term_relationships 
        ON JustLast25.ID = wp_term_relationships.object_id 
        LEFT JOIN wp_term_taxonomy 
         ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id 
         LEFT JOIN wp_terms 
          ON wp_term_taxonomy.term_id = wp_terms.term_id 
      order by 
       JustLast25.ID DESC) PreQualify 
    order by 
     PreQualify.SeqPerID, 
     PreQualify.ID DESC 
    LIMIT 50 

後に表示されますもう一度レベルを上げてください。

select 
     FinalSet.* 
    from 
     (full query from above) FinalSet 
    order by 
     FinalSet.ID DESC, 
     FinalSet.SeqPerID 
関連する問題