2009-09-08 6 views
0

Wordpress/MySQL personnalisées Les requêtesWordpress: requête mysql pour renvoyer des messages à partir de mots clés spécifiques à categry?

J'ai une requête pour renvoyer tous les messages d'une catégorie spécifique:

SELECT ID, post_title, post_name, guid, post_date, post_content, guid FROM wp_posts as p 
INNER JOIN wp_term_relationships AS tr ON 
(p.ID = tr.object_id AND 
tr.term_taxonomy_id IN (4)) 
INNER JOIN wp_term_taxonomy AS tt ON 
(tr.term_taxonomy_id = tt.term_taxonomy_id AND 
taxonomy = 'category') 
ORDER BY id DESC LIMIT 10 

Mais je dois aussi cette requête pour renvoyer les mots-clés associés à chaque poste. J'ai commencé à créer une requête "mots-clés par ID poste", mais je me suis rendu compte que ce serait un appel très coûteux lorsqu'il est répété.

Une idée sur la façon de demander les mots-clés/termes pour chaque article qui revient? Séparé par des virgules fonctionnerait, je suppose?

SOLUTION:

Aucune jolie manière de le faire dans MySQL - se joindre à toutes ces tables peuvent être méchant. Ainsi, la solution est de trois étapes:

1) obtenir les messages:

SELECT DISTINCT ID, post_title, post_name, guid, post_date, post_content, guid , GROUP_CONCAT(k.term_taxonomy_id) as keywords FROM wp_posts as p 
INNER JOIN wp_term_relationships AS tr ON 
(p.ID = tr.object_id AND 
tr.term_taxonomy_id IN (4)) 
INNER JOIN wp_term_relationships as k ON 
(p.ID = k.object_id) 
INNER JOIN wp_term_taxonomy AS tt ON 
(tr.term_taxonomy_id = tt.term_taxonomy_id AND 
taxonomy = 'category') 
GROUP BY p.ID 
ORDER BY id DESC LIMIT 10 

Le "group_concat" retournera "mots-clés" retour comme des séparés par des virgules ID

2) obtenir les mots-clés de wp_terms

3) utilisent PHP pour rechercher des mots-clés de ce tableau (# 2) au besoin

+0

Pouvez-vous nous dire comment vous allez utiliser les données? Il y a des requêtes WordPress intégrées qui retourneront ces données sans avoir à faire des requêtes MySQL personnalisées si vous voulez simplement les afficher sur un site ... – Michelle

+0

Je fais cet appel en dehors de Wordpress et je ne souhaite pas inclure le WP bibliothèques - d'où la nécessité d'un appel MySQL direct. – jmccartie

Répondre

1

Vous pouvez sélectionner tous les mots clés et messages ids avec une autre requête et combiner les deux re sultes au niveau supérieur (PHP - je suppose que vous l'utilisez). Vous appelerez la base de données seulement deux fois, cependant vous devrez écrire plus de logique au niveau de PHP.

2 résultat ressemblerait à ceci:

post_id | keyword 
----------------- 
     2 | keyword1 
     2 | keyword2 
     3 | keyword3 
     4 | keyword2 
     4 | keyword10 
+0

Merci. Comme je l'ai mentionné, j'essaie d'éviter cela car je dois en demander BEAUCOUP (parfois jusqu'à des milliers) et je ne veux pas faire un deuxième appel MySQL pour chacun. – jmccartie

+0

Vous ne m'avez pas compris. Vous appelez 2ème requête qui renvoie le résultat comme j'ai ajouté à ma réponse. Quel que soit le nombre de messages que vous avez, vous n'appelez que deux requêtes sql: d'abord, renvoyez tous les articles dans la catégorie que vous voulez et les seconds, qui renvoient tous les mots-clés avec les identifiants des articles. Voir le tableau ci-dessus (édité) –

+0

Ah je vois - alors appelez tous les messages, puis tous les mots-clés et utilisez PHP pour les faire correspondre? Si c'est le cas, comment puis-je demander les ID de mot clé pour chaque article de mon appel d'origine? (Je suppose que je l'utiliserais comme clé) – jmccartie

Questions connexes