我需要一些关于这个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");
并不完全正常......任何帮助都会非常感激。
答案 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