2011-04-24 11 views
0

나는이 SQL 쿼리와 도움이 필요단일 SQL 쿼리는

을 heres 내 MySQL의 테이블 구조 :

: 내가 필요로하는 형식으로 나에게 결과를 내 SQL 쿼리가

DOMAINS 
- id 
- domain_name 

KEYWORDS 
- id 
- keyword 
- keyword_slug 

PAGES 
- id 
- id_domain 
- id_keyword 

입니다

- 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

답변

1

키워드를 하나의 열에 연결하려는 경우가 아니면 단 하나의 행 (예 : 각 도메인 당 키워드 당 1 행) 만 얻습니다. 따라서 당신은 결과를 읽을 때 (사용하는 스크립팅 언어로) 중첩 된 구조로 그룹화해야합니다. 그룹 기준으로 도메인 당 하나의 키워드 인스턴스 만 확보해야합니다. 왼쪽 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

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