2012-04-29 8 views
1

j'essaie de joindre mes rangées de table de poteau avec la table de conditions, ma publication de base de données et structure de base de données est même que wordpress, je ne sais pas comment joindre une rangée avec plusieurs rangées;comment joindre poste avec termes une requête?

CLAIR Exemple:

Table post:

post_id 
post_title 
post_content 
post_dateline 
post_owner 

termes tableau:

term_id 
term_name 
term_title 
term_type 

table term_relationships:

post_id 
term_id 

Maintenant, je dois: un message avec une valeur d'identifiant 3; trois termes avec des valeurs id (4,6,7)

term_relationships lignes comme:

post_id  term_id 
    3   4 
    3   6 
    3   7 

est possible obtenir toutes ces informations avec une requête ou je devrais d'abord les messages de requête, essayez d'obtenir des informations sur les termes ?

+1

Il y a la fonction mysql group_concat() si vous avez besoin de retourner une seule ligne, mais vous feriez probablement mieux d'utiliser une requête séparée pour récupérer les relations post/termes. –

+0

Pourquoi n'avez-vous pas de colonne post_id dans la table des termes? – miro

+0

J'utilise term_relationships comme wordpress, parce qu'un poste a plusieurs termes –

Répondre

1

Utilisez la fonction GROUP_CONCAT de MySQL, il se joindra à plusieurs lignes à une seule rangée, mais vous donner le résultat comme un champ virgule seperated.

+0

J'utilise deux requêtes, d'abord sélectionnez tous les termes, puis utilisez group_concat pour ... merci –

0

Le type de jointure que vous recherchez est LEFT JOIN. Quelque chose comme ceci:

Select * from post p 
left join term_relationships r on r.post_id = p.id 
left join terms t on t.term_id = r.term_id 
0

Si je comprends bien vos besoins, essayez:

select * from post_table p 
left join terms_table t on p.post_id = t.term_id 

ou, une autre option pourrait être:

select *, (select term_id from term_table where term_id=p.post_id) from post_table p 
0

Démarrer une jointure avec votre table de correspondance et ajouter des données utilisant des jointures à gauche sur les deux tables?

SELECT * FROM term_relationships 
LEFT OUTER JOIN terms ON term_relationships.term_id = terms.term_id 
LEFT OUTER JOIN posts ON term_relationships.post_id = posts.post_id 
0

Qu'est-ce que vous en avez besoin? Je pense que l'obtenir en utilisant une requête est plutôt contre-productive.

Pourquoi ne pas utiliser deux requêtes?

SELECT * FROM posts; 
SELECT * FROM terms WHERE term_id IN (SELECT term_id FROM term_relationships WHERE post_id = $post_id); 

désolé pour mon anglais