我有一个2000个表的数据库,它们似乎在增加,因为每个表代表一个用户。所有表的结构都是相同的。
我希望获得前5个值 例如,如果我们采取列 - >操作系统(操作系统) 然后 查询应该从每个表中获取前5个操作系统名称及其计数,最后我应该获得所有表的总结结果,以获得所有数据库表中的前5个操作系统名称。
怎么做?
我可以使用PHP&仅限MySQL
我从所有表中获取了相同的列,但无法访问存储在其中的值..
SELECT `COLUMN_NAME` FROM INFORMATION_SCHEMA.columns WHERE TABLE_SCHEMA='database_name' AND COLUMN_NAME = 'os'
答案 0 :(得分: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
和聚合来实现您的目标。我只是不了解你的桌子结构...