2011-04-24 37 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