2009-08-14 54 views
1

我有6张桌子用完全相同的结构,字段名是这样的:获取数据从许多不同的MySQL表

country | incoming | outgoing_national | outgoing_us | outgoing_uk | outgoing_global | outgoing_text 

我试图代码,其中的费率立即更改费率表(j使用jQuery)当从下拉列表中选择一个国家时。因为一旦他们选择一个国家,就会发生这种情况,所以它应该尽可能快。

所以基本上例如哪个国家='英格兰'我需要来自所有不同表格的数据,所以我可以在页面上显示所有数据。我一直在玩从我以前的类似问题得到的代码,但我很困惑,试图解决它。我会感谢任何形式的帮助:D

+0

你应该把一个字段,表示塔里夫的第一个表的类型。并放弃所有其他人。更好的性能。更好的可维护性。 – 2009-08-14 14:23:01

回答

1

最快的方式做到这一点是通过union all。当然,这并不会删除重复内容,所以如果您需要这样做,请使用union代替(尽管您会获得性能提升)。此外,您需要在所有表格中索引country列。这样做会很快撤回所有这些查询。

其次,为什么你有六个所有相同结构的表?这对我来说似乎有点不合适。

获得所有可用的国家:

select distinct 
    country 
from table1 

要获得一国之内的所有数据:

select 
    * 
from 
    table1 t1 
where 
    country = 'England' 
union all 
select 
    * 
from 
    table2 t2 
where 
    country = 'England' 

... 

union all 
select 
    * 
from 
    table6 t6 
where 
    country = 'England' 
+1

非常好的一点关于六个表具有相同的结构...严重 – jle 2009-08-14 13:22:11

+0

因为他们都是针对不同的手机tarrifs ..我可以把他们都放在一张桌子上,但它不会那么方便,我也需要有一个下拉列表中的国家,所以我要做的就是显示表A中的国家名称。 – zuk1 2009-08-14 13:27:22

+0

@zuk:您是否需要查询来获取国家? – Eric 2009-08-14 13:38:54

1
SELECT * FROM Table_1 WHERE country='England' 
UNION 
SELECT * FROM Table_2 WHERE country='England' 
. 
. 
. 

等等。

如果你想看到的是在两个或多个表相同的行使用UNION ALL