首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向现有的MySQL表中添加动态列?

问向现有的MySQL表中添加动态列?
EN

Stack Overflow用户
提问于 2014-10-17 03:34:39
回答 3查看 8.3K关注 0票数 0

只是想知道如何将动态列插入到现有的MySQL表中?例如:我已经有了"sampletable“,我想要创建可以向现有的table,example: column1, column2, column3添加动态列的输入字段。如何用动态编号来实现这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-17 03:46:33

我同意@Barmar的观点,如果您试图这样做,您的SQL表结构是错误的。在这种情况下,你要做的就是所谓的“一对多”的关系。这通常是通过下面这样的操作来实现的。

表1:包含所有常用数据的列(在术语中为非“动态”列),以及唯一的ID列,所有良好的数据库表都应该有这些列。

表2: ID列,引用表1中ID列的列,动态列中的数据列。

现在,您可以将通常存储在“动态列”中的值存储在第二个表的各个行中。

示例

代码语言:javascript
复制
//  sample:
//
// | id | name |
//
// dynamic_values:
//
// | id | sample_id | value |

// Selecting data

SELECT * FROM sample WHERE id = 1;
SELECT * FROM dynamic_values WHERE sample_id = 1;

// Querying on "dynamic columns"
SELECT * FROM sample s LEFT JOIN dynamic_values d ON d.sample_id = s.id WHERE d.value = 'something';
票数 2
EN

Stack Overflow用户

发布于 2016-06-28 14:08:34

尝试使用这组代码为现有的表.创建动态列

代码语言:javascript
复制
SET SQL_SAFE_UPDATES = 0;
        Drop TEMPORARY table if exists Temp_Report;
        CREATE TEMPORARY TABLE Temp_Report (Report_Date Date);

        Drop TEMPORARY table if exists Temp_Product_Tax;
        CREATE TEMPORARY TABLE Temp_Product_Tax as SELECT concat(REPLACE(Tax_category,' ','_'),'|',Taxvalue) as 'Tax_category',Taxvalue FROM tax_category c left join taxmaster t on c.id=t.catid ; -- where c.is_Product =1

    select * from Temp_Product_Tax;
            set Count_1=(SELECT COUNT(*) FROM Temp_Product_Tax);
                set Var_1=0;     
                    While(Count_1>Var_1) do
                            set @Col_Name=Concat( Var_1+1,'_',REPLACE((select Tax_category from Temp_Product_Tax limit Var_1,1),'.','_'),' Double(15,2)');

                            set @Col_Name=Concat('ALTER TABLE Temp_Report ADD COLUMN ', @Col_Name) ;
                            PREPARE stmt FROM @Col_Name;
                            EXECUTE stmt;

                    set Var_1=Var_1+1;
                    END While;  

    select * from Temp_Report;

    SET SQL_SAFE_UPDATES = 1;
票数 1
EN

Stack Overflow用户

发布于 2014-10-17 03:40:38

实际上,您打算做的事情,即添加动态列,根本不是一个好的实践,我认为。不管怎样,你可以用ALTER TABLE来做这件事。

代码语言:javascript
复制
for($i=1;$i<4;$i++){

    mysqli_query("ALTER TABLE mytable ADD COLUMN `input.$i` VARCHAR(40)",$db_con);
}

但我也建议采用同样的方式,也就是BARMER在上面的评论中提到的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26417461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档