2015-11-26 53 views
0

我有一个将要动态更改的表格。它可能有数千个列。如何使用MYSQL获取表格中所有列的不同值

我需要一种方法来查找每个列中的不同值,只要我运行SQL查询。

+2

您能否描述其中需要数千个色谱柱?提出的眉毛。 – Drew

+1

@德鲁哈哈。在你指出这一点之前,我认为他说了数千行。其数据挖掘的数据集是 – frosty

+0

。 U可以预计2000列* 1,000,000行 – wittyenggs

回答

0

对于包含这么多列的表格,没有可能的理由。您的模式设计是错误的。

具有良好的硬件和适当的索引mysql可以处理数百万甚至数亿行,但列是另一回事。即使有成千上万列的设计理由,但MySQL内部有物理限制会阻止它,大致如下(我的数字可能不会与最新版本的MySQL保持同步 - 我会稍后再试验):

4096列:理论值或“硬”极限列数。

2829列:MyISAM表的实际物理极限

1000列:对于InnoDB

0

硬性限制,假设你有一个表,如下所示

CREATE TABLE `table_no1` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `column0001` INT(11) NOT NULL DEFAULT '0', 
    `column0002` INT(11) NOT NULL DEFAULT '0' 
    `column0003` INT(11) NOT NULL DEFAULT '0' 
    `column0004` INT(11) NOT NULL DEFAULT '0' 
    . 
    . 
    .  
    `column2000` INT(11) NOT NULL DEFAULT '0' 
    PRIMARY KEY (`id`) 
); 

我还假设你有一个很好的程序来分析这个数据,并为你要求这个查询的程序。

您可以使用下面的查询来获得不同的值

select DISTINCT(column0001) from table_no1; 
select DISTINCT(column0002) from table_no1; 

但那不是有效的。所以你需要使用你的程序动态创建这个查询。为此,您必须动态查找列名称。为此,您可以使用以下查询

select COLUMN_NAME from information_schema.`COLUMNS` 
where TABLE_SCHEMA='your_database_name' and TABLE_NAME='table_no1' 

上面的查询将给出该表的列名。从中您可以动态创建独特的查询并检索各个列的不同值。

相关问题