2010-03-16 76 views
2

我有10個表中的數據有InnoDB引擎檢索從多個表中引用在MySQL一些表

1.一個是state_table哪些屬性state_idstate_name

2.另一個表city_table哪些屬性分別是city_idcity_name

3.一個表permit_table哪個屬性是p_id

以上city_id,state_id and permit_id是對其餘7個表格的引用。

每個表具有STATE_ID,city_id和permit_id參考上面的表格

現在我想提取與各自的城市名和狀態名稱的所有表中的數據(各表可以具有不同的城市名和狀態ID)

即時通訊使用下面的MySQL查詢(我知道這是非常長的方式....)。 請告訴我如何用優化的方法做到這一點?

SELECT p.*,cp.city_name,sp.state_name, 
     o.*,co.city_name,so.state_name, 
     t.*,ct.city_name,st.state_name, 
     ............................   
     .......so on................ 
     ............................ 
    FROM permit_table p 
      JOIN table_city cp ON cp.city_id=p.city_id 
      JOIN table_state sp ON sp.state_id=p.state_id  

      JOIN table_one o ON o.permit_id=p.permit_id 
      JOIN table_city co ON co.city_id=o.city_id 
      JOIN table_state so ON so.state_id=o.state_id 

      JOIN table_two t ON t.permit_id=p.permit_id 
      JOIN table_city ct ON ct.city_id=t.city_id 
      JOIN table_state st ON st.state_id=t.state_id 
      ..............................................  
      ................so on.........................    
      .............................................. 

WHERE p.permit_id=base64_encode(mysql_real_escape_string($_GET[pid])); 

感謝大家一直以來的幫助。

回答

1

不要認爲表必須加入其他。他們只需加入集團。因此,不要多次添加「JOIN table_city」和「JOIN table_state」,只要確保先前的聯接是正確的,並在必要時加入其他聯接。例如,你可以說 JOIN table_two ON t.permit_id = p.permit_id AND t.city_id = p.city_id AND ...

+0

@MJB'table_permit' city_id和'table_two' city_id是不同的,那我們怎樣才能使用't.city_id = p.city_id' – diEcho 2010-03-16 12:25:36

+0

我一定誤解了原文。對不起 - 我以爲你一再加入同一列。我的錯。 – MJB 2010-03-16 18:38:46

0

如果表格不直接映射到對方我假設你必須有一箇中間表,將連接兩個。如果不是,那麼製作另一張桌子可以映射州和城市可能很有用。根據您所保存的信息,您也可以在主鍵以外的其他位置連接表。就像你在城市表中保留州名一樣,你也可以加入表格。