2011-04-24 48 views
0

我需要一些帮助,这SQL查询单个SQL查询

继承人我mysql表结构:

DOMAINS 
- id 
- domain_name 

KEYWORDS 
- id 
- keyword 
- keyword_slug 

PAGES 
- id 
- id_domain 
- id_keyword 

我需要的是我的SQL查询来给我结果的格式如下:

- 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 

所以我在想这样的事情?不知道如何获得分组,有点让我困惑:

$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"); 

是不完全正常工作....任何帮助将不胜感激。

+1

您无法直接在mysql结果集中将domain_name作为组的标题。 – zerkms 2011-04-24 01:53:19

回答

1

你只打算让单行(即每每个域每个关键字1行),除非你想的关键字Concat的到一个列。所以当你阅读结果时(无论你使用哪种脚本语言),你必须将它们组合成嵌套结构。小组应该确保您只能获得每个域的关键字的一个实例。通过使用JOIN而不是左JOIN,您还可以确保您不要将没有组合在一起的域/关键字。

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

请尝试以下操作。你可以选择你想要的列,现在我拉全部。

SELECT * FROM pages 
JOIN keywords ON pages.id_keyword = keywords.id 
JOIN domains ON pages.id_domain = domains.id; 

MySQL可能不是根据您希望返回的数据量对结果进行分组的最佳方式。但是,您可以轻松地使用PHP执行此操作,因为您正在循环执行结果。

+0

他想拉取domain_name和关键字。页面只有索引... – bensiu 2011-04-24 01:55:40

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