2010-02-01 2 views
0

그래서 매핑 테이블에서 기본값으로 설정되어있는 레코드 만 반환하려고하지만 그 시장에서 해당 항목과 관련된 모든 언어를 기본값으로 설정합니다 . 벨로 우는 내가 사용하고있는 정확한 SQL이다. 내 SQL 그냥 원하는 인스턴스로 내 목록을 제한하지 않습니다

SELECT `teams`.*, 
     `markets`.`title` AS `market`, 
     `markets`.`short_name`, 
     `market_countries`.*, 
     `countries`.`title` AS `country`, 
     `languages`.`title` AS `language`, 
     `languages`.`short_code`, 
     `status`.`title` AS `status`, 
     `team_types`.`title` AS `type`, 
     `market_languages`.* 
FROM `teams` 
JOIN `markets` ON teams.market_id = markets.id 
LEFT JOIN `market_countries` ON markets.id = market_countries.market_id  
LEFT JOIN `countries` ON countries.id = market_countries.country_id 
LEFT JOIN `languages` ON languages.id = teams.language_id 
LEFT JOIN `status` ON teams.status_id = status.id 
JOIN `team_types` ON team_types.id = teams.type_id 
JOIN `market_languages` ON teams.market_id = market_languages.market_id  
WHERE (market_languages.is_default = 1) 
    AND (teams.status_id = 3)  
GROUP BY `teams`.`id` 
ORDER BY `teams`.`order_id` ASC, `teams`.`status_id` ASC 

는 지금은 특정 열을 획득하고 시장과 언어에 가입하지만, 시장 및 언어 관한 기본 언어입니다 다른 테이블이있다하고 있습니다. 불행하게도 그것은 두 언어가 모두 기본이라는 것을 말하고 있습니다. db에서 분명히 그 시장을위한 단지 하나의 언어 디폴트입니다.

+0

테이블 구조를 알지 못하면 무엇이 잘못 될지 알기가 어렵습니다. 특히, 서로 다른 테이블 사이의 관계 (1 : 1, 1 : 많은, 많은 : 많은)는 무엇입니까? –

+0

테이블 A에는 셀 1이 테이블 B와 관련되어 있고 테이블 A에는 테이블 C와 관련된 다른 셀 2가 있습니다. 그러나 B와 C에는 테이블 A와 테이블 1과의 일대일 관계가있는 일대 다 관계가 있습니다 테이블. 문제는 테이블 b와 관련된 테이블 A의 마스터 레코드를 얻음으로써 발생하지만 테이블 C는 두 번째 정의 레이어를 결정합니다. 나는 실제로 질문의 성격을 포기하지 않고 더 설명 할 수 있었으면 좋겠다. 그러나 모두에는 테이블 B와 관련하여 마스터 폼 테이블 C를 정의하는 테이블 D가 있으므로 어떤 것을 보여야하는지에 대한 구체적인 정의가 제공됩니다. – AlbertRosa

답변

0

더 많은 tweeking 후 나는 처음에 하나의 조인을하고 있었지만 언어에 대한 좋은 결과를 얻기를 바랐다. 그러나 시장은 잘못되었다. 그래서 복잡한 조인을 검색하고 www.bryanwebconsulting.com/blog/ Outer Join on Multiple Fields에서 좋은 자료를 찾았습니다.

SELECT `teams`.*, 
    `markets`.`title` AS `market`, 
    `markets`.`short_name`, 
    `market_countries`.*, 
    `countries`.`title` AS `country`, 
    `languages`.`title` AS `language`, 
    `languages`.`short_code`, 
    `status`.`title` AS `status`, 
    `team_types`.`title` AS `type`, 
    `market_languages`.* 

FROM `teams` 

INNER JOIN `markets` ON teams.market_id = markets.id 

LEFT JOIN `market_countries` ON markets.id = market_countries.market_id 

LEFT JOIN `countries` ON countries.id = market_countries.country_id 

LEFT JOIN `languages` ON languages.id = teams.language_id 

LEFT JOIN `status` ON teams.status_id = status.id 

INNER JOIN `team_types` ON team_types.id = teams.type_id 

INNER JOIN `market_languages` ON (teams.language_id = market_languages.language_id 
AND teams.market_id = market_languages.market_id) 

WHERE (market_languages.is_default = 1) 
AND (teams.status_id = 3) 

GROUP BY `teams`.`id` 

ORDER BY `teams`.`order_id` ASC, `teams`.`status_id` ASC 

는 그래서 그래 당신은 더 자세한을 할 수있다 "(AND) ON 저쩌구"는 AND를 사용하여 조인 :

그래서 다음과 같이 내가 SQL을 modded하게 된 것을 읽은 후.

희망이 다른 사람들에게도 도움이되기를 바랍니다. 그리고 나는 이것을 훨씬 더 정리할 수있을 것이라고 생각합니다.

관련 문제