只是想知道如何将动态列插入现有MySQL表?例如:我已经有“sampletable
”,我想创建可以将动态列添加到现有table
,example: column1, column2, column3
的输入字段。如何用动态编号做到这一点?
答案 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 。