单个sql查询多个表

时间:2011-04-24 01:47:46

标签: php mysql

我需要一些关于这个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");

并不完全正常......任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:1)

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

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

MySQL可能不是根据您想要返回的数据量对结果进行分组的最佳方式。但是,当您循环结果时,您可以使用PHP轻松完成此操作。

答案 1 :(得分: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

答案 2 :(得分:1)

除非您希望将关键字连接到单个列,否则您将获得单行(即每个域每个关键字1行)。因此,当您阅读结果时(无论使用何种脚本语言),您必须将它们组合成嵌套结构。 group by应该确保每个域只获得一个关键字实例。通过使用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