2011-04-24 4 views
0

i besoin d'aide avec cette requête SQLseule requête SQL pour les tables multiples

Heres ma structure de table mysql:

DOMAINS 
- id 
- domain_name 

KEYWORDS 
- id 
- keyword 
- keyword_slug 

PAGES 
- id 
- id_domain 
- id_keyword 

ce que je dois ma requête SQL pour me donner des résultats dans ce format:

- domain_name 
-- keyword in domain linked via the "pages" table 
-- keyword in domain linked via the "pages" table 
-- keyword in domain linked via the "pages" table 
- domain_name 
-- keyword in domain linked via the "pages" table 
-- keyword in domain linked via the "pages" table 
-- keyword in domain linked via the "pages" table 

alors je pensais quelque chose comme ça? pas sûr comment obtenir le regroupement, me confondant un peu:

$sql = mysql_query("select d.domain_name, k.keyword from domains as d, keywords as k, pages as p where d.id=p.id_domain and k.id=p.id_keyword group by p.id_domain"); 

ne fonctionne pas exactement .... toute aide serait appréciée.

+1

Vous ne pouvez pas obtenir domain_name en tant qu'en-têtes de groupes directement dans le jeu de résultats mysql. – zerkms

Répondre

1

Vous n'obtiendrez que des lignes uniques (par exemple, 1 ligne par mot-clé pour chaque domaine), sauf si vous souhaitez concaténer les mots-clés dans une seule colonne. Donc, les moyens que vous aurez à les regrouper dans des structures imbriquées que vous lisez les résultats (dans n'importe quel langage de script que vous utilisez). Le groupe par doit vous assurer que vous obtenez seulement une instance du mot-clé par domaine. En utilisant un JOIN au lieu d'un JOIN à gauche, vous vous assurez également que vous ne tirez pas les domaines/mots-clés qui n'ont pas de combinaisons.

SELECT d.domain_name, k.keyword 
FROM pages p, keywords k, domains d 
WHERE p.id_domain = d.id 
AND p.id_keyword = k.id 
GROUP BY d.domain_name, k.keyword 
ORDER BY d.domain_name 
1

Essayez les solutions suivantes. Vous pouvez sélectionner les colonnes que vous voulez, pour l'instant je tire tout. MySQL n'est peut-être pas le meilleur moyen de regrouper les résultats en fonction de la quantité de données que vous souhaitez renvoyer. Mais vous pouvez facilement le faire avec PHP si vous bouclez les résultats.

+0

il veut tirer domain_name et mot-clé. les pages ont seulement des index ... – bensiu

1
select d.domain_name, k.keyword 
from pages as p 
JOIN domains as d ON d.id=p.id_domain 
JOIN keywords as k ON k.id=p.id_keyword 
group by p.id_domain, p.id_keyword