将动态列添加到现有MySQL表中?

时间:2014-10-17 03:34:39

标签: php mysql

只是想知道如何将动态列插入现有MySQL表?例如:我已经有“sampletable”,我想创建可以将动态列添加到现有tableexample: column1, column2, column3的输入字段。如何用动态编号做到这一点?

3 个答案:

答案 0 :(得分:1)

我同意@Barmar如果你试图这样做,你的SQL表结构是错误的。在这种情况下,你要做的是什么叫做"一对多"关系。这通常通过执行以下操作来实现。

表1:包含所有常用数据的列(非 - "动态"列),以及所有优秀数据库表应具有的唯一ID列

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

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

示例

//  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';

答案 1 :(得分:1)

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

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;

答案 2 :(得分:0)

事实上,你想要做的事情,即添加动态列并不是我认为的好习惯。无论如何 您可以使用ALTER TABLE

执行此操作
for($i=1;$i<4;$i++){

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

但我会以同样的方式提出建议,即上述评论中提到的 BARMER