2015-12-27 21 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來實現自己的目標的。我只是不知道你的桌子結構是否足夠...

相關問題