2010-02-09 3 views
1

Je cours WordPress et je voudrais écrire une requête personnalisée qui montrerait une archive mensuelle de messages basés sur une catégorie spécifique. J'ai utilisé le mode de débogage pour savoir comment obtenir une archive mensuelle basée sur tous les messages, sélectionnez une catégorie spécifique. Voici les questions:Besoin d'aide avec MySQL, joindre deux requêtes

Get archives montlhy:

SELECT YEAR(post_date) AS `year`, MONTH (post_date) AS `month`, 
    count(ID) as posts FROM wp_posts 
    WHERE post_type = 'post' AND post_status = 'publish' 
    GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC 

Sélectionner une catégorie:

SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy 
    AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy 
    IN ('category') AND t.slug = 'blog' ORDER BY t.name ASC 

Je ne peux pas comprendre comment joindre ces deux;) Toute aide appréciée!

Merci.

Mise à jour:

Il y a aussi une autre table impliquée appelé term_relationships, de sorte que fait 4 tables au total. Voici une image de la structure de base de données de WordPress: http://codex.wordpress.org/images/8/83/WP_27_dbsERD.png

Quoi qu'il en soit, voici où je suis:

SELECT t.*, tt.*, YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, 
    count(ID) as posts FROM wp_posts, wp_term_relationships AS tr, 
    wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id 
    WHERE tt.taxonomy IN ('category') AND t.slug = 'blog' 
    AND post_type = 'post' AND post_status = 'publish' 
    AND ID = tr.object_id AND tr.term_taxonomy_id = t.term_id 
    GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC 

Je sais que ce n'est pas la meilleure façon de contourner, et c'est la raison pour laquelle j'ai besoin de votre aide;)

Merci.

+0

Pour ceux qui ne fonctionne pas WordPress, pouvez-vous poster le résultat de 'show créer table' pour chacun des tables impliquées? En particulier, est-ce que les deux tables ont un champ qui peut être utilisé pour les relier les unes aux autres? (Ou peuvent-ils être liés les uns aux autres via une troisième table?) –

+1

Personne ne peut pas trouver les relations entre wp_posts et wp_terms à partir de ces requêtes seulement, vous feriez mieux de nous donner quelques schémas de tables ici – vava

+2

vava, utilisez http: // codex .wordpress.org/Fichier: WP_27_dbsERD.png pleine taille http://codex.wordpress.org/images/8/83/WP_27_dbsERD.png 146 kb – osgx

Répondre

3

Que diriez-vous quelque chose comme ceci comme base pour les jointures et où des ajouts de clause que vous avez besoin:

SELECT 
     YEAR(post_date) AS `year`, 
     MONTH (post_date) AS `month`, 
     count(ID) as posts 
    FROM wp_posts 
    INNER JOIN wp_term_relationships wtr ON wp_posts.id = wtr.object_id 
    INNER JOIN wp_term_taxonomy wtt ON wtr.term_taxonomy_id = wtt.term_taxonomy_id 
    INNER JOIN wp_terms wt ON wtt.term_id = wt.term_id 
    WHERE post_type = 'post' AND post_status = 'publish' 
    AND wtt.taxonomy = 'category' 
    AND wt.name = 'enter category name here' 
    GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC 
+0

Ça a l'air bien, et semble travailler aussi! ;) Merci – kovshenin

+0

Je l'ai alimenté à travers des filtres wordpress et cela a fonctionné, merci beaucoup Kris! – kovshenin

+0

Great stuff :) heureux d'aider –