2010-02-01 20 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 

現在我獲得特定的列和加入市場,並在語言,但還存在一個與市場和語言,並且是默認語言的另一個表。不幸的是,這是說,這兩種語言都是默認的,在數據​​庫中,它顯然只是該市場的一種語言默認值。

+0

這是很難知道是怎麼了?不知道你的表結構。特別是不同表格之間的關係(1:1,1:很多,很多)呢? – 2010-02-04 13:14:55

+0

有表A已經小區1涉及表B和表A具有另一個小區2,涉及到表C.但即B和C具有一對多的關係,其中表A具有既具有一一對應的關係表。該問題源於從表A獲得與表b相關的主記錄,但表C確定了第二層定義。我希望我可以解釋更多,而不是實際拋棄問題的本質。但總而言之,有一個表D定義了與表B相關的主表格C,因此提供了一個具體的定義來顯示。 – AlbertRosa 2010-02-05 08:20:29

回答

0

所以更tweeking後,我發現我的解決方案,最初我是做單一的加入,並希望得到的語言了良好的回報,但但市場中是錯誤的。所以我做了一些關於複雜連接的搜索,我在www.bryanwebconsulting.com/blog/外部加入多個字段上找到了一個很好的資源。

所以閱讀後,我改裝成的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` 

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)」。

希望這有助於其他人也和我想我現在更可以打掃一下。

相關問題