2010-11-20 4 views
0

Ok, j'essaie de finir avec une vue qui retourne des champs d'une instance de Drupal s'exécutant sur MySQL. Le problème est cette information est répartie sur trois tableaux:Sélection de données sur plusieurs tables dans MySQL

tableau 1 (keyword_search_table): contient les champs suivants:

id, mot-clé, dst exemple données: 1, 'poulet', « aboutus/Fred » 2, 'boîtes', 'services/patching_stuff'

tableau 2 (url_alias): contient les champs suivants:

pid, src, dst exemple des données: 45, 'node/22' , 'aboustus/fred' 46, 'node/36', 'patching_stuff'

tableau 3 (node_revisions): contient les champs suivants:

JNV, titre, taquin exemple données:

22, « A propos de Fred - Notre président ',' Fred est un gars super et a été pres pendant 4 ans ... ' 36,' Patching Your Deck ',' Patching votre deck doit être fait en utilisant des barbelés ... "

I ' J'essaie de finir avec ceci:

mot-clé, DESTINATION_URL, titre, par exemple teaser_text

sortie à partir des données ci-dessus:

  1. poulet, Osec/fred, A propos de Fred - Notre président, Fred est un grand gars et a été pres pendant 4 ans. ..
  2. Boîtes, services/patching_stuff, patcher votre plate-forme, patcher votre plate-forme doit être fait à l'aide du fil barbelé ...

Im deviner que je dois faire une extérieure et intérieure ... gauche rejoint I » Je suis mal à écrire ce genre de choses. Des idées?

Répondre

0

Vous ne pouvez pas obtenir ces données car url_alias ne contient pas nid seulement pid. JOIN peut être créé sur des champs similaires dans différentes tables. par exemple, je vais sélectionner les données de keyword_search_table et node_revisions.title.

 
SELECT keyword_search_table.nid, keyword_search_table.keyword, node_revisions.title, node_revisions.teaser FROM keyword_search_table INNER JOIN ON keyword_search_table.nid = node_revisions.nid; 

si url_alias ayant JNV (ou vous pouvez être sûr que = pid JNV) votre requête devrait ressembler à quelque chose comme ça:

 
SELECT keyword_search_table.nid, keyword_search_table.keyword, node_revisions.title, node_revisions.teaser, url_alias.pid FROM keyword_search_table INNER JOIN ON keyword_search_table.nid = node_revisions.nid INNER JOIN ON url_alias.pid = node_revisions.nid; 
+0

THis me semble logique totale. Merci Ran! Mais une chose que je sais est que la colonne keyword_search_table ID n'a aucune relation avec PID ou NID. C'est seul. chaque enregistrement de cette table a un URL_Alias ​​qui correspond à un alias d'URL dans la table url_alias. – tonyrocks

+0

Si keyword_search_table.id n'est pas nid, vous devez rechercher d'autres données liées, par exemple, URL_Alias. La requête doit ressembler à ceci: SELECT keyword_search_table.nid, keyword_search_table.keyword, node_revisions.title, node_revisions.teaser, url_alias.pid INNER JOIN ON mot_search_table.url_alias = URL_alias.url_alias INNER JOIN ON url_alias.pid = node_revisions.nid; –

+0

Je ne veux pas paraître idiot, mais ai-je besoin d'un quelque part? – tonyrocks

Questions connexes