Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从引用mysql中某些表的多个表中检索数据_Mysql - Fatal编程技术网

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

从引用mysql中某些表的多个表中检索数据,mysql,Mysql,我有10张桌子有innoDB引擎 1.一个是state\u表哪些属性是state\u id和state\u name 2.另一个表city\u表哪些属性是city\u id和city\u name 3.再多一个表permit\u table哪个属性是p\u id 上面的城市id、州id和许可证id是对其余7个表的引用 每个表格都有州id、城市id和许可证id,参考上述表格 现在,我想提取所有具有各自城市名称和州名称的表数据(每个表可能有不同的城市id和州id) 我正在使用下面的mysql查询(我

我有10张桌子有innoDB引擎

1.一个是
state\u表
哪些属性是
state\u id
state\u name

2.另一个表
city\u表
哪些属性是
city\u id
city\u name

3.再多一个表
permit\u table
哪个属性是
p\u id

上面的
城市id、州id和许可证id
是对其余7个表的引用

每个表格都有州id、城市id和许可证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]));

     

感谢大家一直以来对我的帮助。

不要认为桌子必须相互连接。他们只需要加入集团。因此,与其多次添加“JOIN table_city”和“JOIN table_state”,只需确保前面的连接是正确的,并在必要时通过其他连接。例如,你可以说
在t.permit\u id=p.permit\u id和t.city\u id=p.city\u id和…

上连接表2如果表之间没有直接映射,我假设您必须有一个中间表来连接这两个表。如果不是的话,制作另一个表格可能会很有用,您可以在其中映射州和城市。根据所保存的信息,还可以在主键以外的其他对象上联接表。比如说,如果你把州名保存在城市表格中,你也可以在上面加入表格。

@MJB
table\u permit
city\u id和
table\u两个
city\u id不同,那么我们如何使用
t.city\u id=p.city\u id
我一定是看错了原始帖子。很抱歉,我以为你在重复加入同一个专栏。我的错。