2015-12-27 16 views
1

我有2000台的数据库,他们似乎每个表增加表示user.So所有表格的结构相同。如何从每个相同的数据库,然后的表中的每一列检索前5位值在整个数据库得到比前5

我想获得前5名的值 例如,如果我们采取列 - > OS(操作系统) 然后 查询应该从每个表的前5名的操作系统名称与他们的数量和到底我应该得到的总和了所有表的结果让整个前5位的操作系统名称的数据库中的所有表..

怎么办呢?

我可以使用PHP & MySQL只

我从所有的表中取出的同一列,但不能访问存储在他们的价值观..

SELECT `COLUMN_NAME` FROM INFORMATION_SCHEMA.columns WHERE TABLE_SCHEMA='database_name' AND COLUMN_NAME = 'os' 
+2

为什么在地球上你需要每个用户有一张桌子?这是非常糟糕的体系结构,我无法想象任何可以有用的场景。 –

+0

我知道,但它只是这样你才能提出一些建议吗? –

+0

这是用'mysql'和'sql-server'标记的,但是你只写了“PHP&MySQL only”...请清除RDBMS(产品和版本)!你发布的'SELECT ... FROM INFORMATION_SCHEMA ...'看起来像SQL Server ... – Shnugo

回答

0

你的设计真的是你应该改变,但这是在MySql中做到这一点的一种方法。测试in this Fiddle

create table test(os int); 
insert into test SELECT 1 UNION SELECT 2 UNION SELECT 3; 

create table test2(os int); 
insert into test2 SELECT 11 UNION SELECT 12 UNION SELECT 13; 

create table test3(os int); 
insert into test3 SELECT 21 UNION SELECT 22 UNION SELECT 23; 

create table testOtherColumn(Other int); 
insert into testOtherColumn SELECT 101 UNION SELECT 102 UNION SELECT 103; 

set @MyCmd= 
concat(
(
    select substr(group_concat(' UNION SELECT ',c.COLUMN_NAME,' FROM ',c.TABLE_NAME SEPARATOR ''),8) 
    from information_schema.columns as c 
    where c.COLUMN_NAME='os' 
),';'); 

select @MyCmd; 

PREPARE MyStatement FROM @MyCmd; 
EXECUTE MyStatement; 
DEALLOCATE PREPARE myStatement; 

您将需要某种形式的排序和LIMIT x和aggregats来实现自己的目标的。我只是不知道你的桌子结构是否足够...

相关问题