我有10个表有innoDB引擎
1。一个是state_table
,其属性为state_id
和state_name
2。另一个表格city_table
,其属性为city_id
和city_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]));
感谢所有人一直帮助我。
答案 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)
如果表格没有直接相互映射,我假设您必须有一个中间表来连接这两个表。如果没有,那么制作另一个可以映射州和城市的表可能很有用。根据您保留的信息,您还可以在主键之外的其他内容上连接表。就像你在州城表中保留州名一样,你也可以加入表格。