从多个表中检索引用mysql中某些表的数据

时间:2010-03-16 12:10:23

标签: mysql

我有10个表有innoDB引擎

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和州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]));

感谢所有人一直帮助我。

2 个答案:

答案 0 :(得分:1)

不要认为这些表必须加入EACH OTHER。他们只需要加入这个集团。因此,不要多次添加“JOIN table_city”和“JOIN table_state”,只需确保先前的连接是正确的,并在必要时加入其他连接。例如,你可以说 JOIN table_two ON t.permit_id = p.permit_id AND t.city_id = p.city_id AND ...

答案 1 :(得分:0)

如果表格没有直接相互映射,我假设您必须有一个中间表来连接这两个表。如果没有,那么制作另一个可以映射州和城市的表可能很有用。根据您保留的信息,您还可以在主键之外的其他内容上连接表。就像你在州城表中保留州名一样,你也可以加入表格。