如何从每个相同数据库的表的每列中检索前5个值,然后遍历整个数据库中的所有前5个

时间:2015-12-27 10:25:47

标签: php mysql database

我有一个2000个表的数据库,它们似乎在增加,因为每个表代表一个用户。所有表的结构都是相同的。

我希望获得前5个值 例如,如果我们采取列 - >操作系统(操作系统) 然后 查询应该从每个表中获取前5个操作系统名称及其计数,最后我应该获得所有表的总结结果,以获得所有数据库表中的前5个操作系统名称。

怎么做?

我可以使用PHP&仅限MySQL

我从所有表中获取了相同的列,但无法访问存储在其中的值..

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

1 个答案:

答案 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和聚合来实现您的目标。我只是不了解你的桌子结构...