如何复制和自动增加 sql 中的列?
How to duplicate and auto increment columns in sql?
我已经很久没有写代码了,所以请认为我是一个真正的基本用户。
我正在实施 vtiger 并尝试通过直接使用数据库来简化它。
这是我的问题:
在我的 table vtiger_paiements 中,我有 2 列:paiements_tks_s1 和 paiements_tks_s1typepaiement。
我想复制这 2 列并将重复项自动递增到 s53(一个接一个,这意味着 paiements_tks_sntypepaiement 始终在 paiements_tks_sn 之后)。
我完全不知道该怎么做。
我真的不想在 vtiger 中创建 53x2 标签...
谢谢你的帮助
PS :一般。假设我有一个名为 payment1 的列。我想将此列复制 N 次并命名为 payment2、payment3、payment4...paymentN。
好吧,让我们假设你有一个 table 当前结构类似于:
payments
> id int(11) PRIMARY KEY AUTO_INCREMENT
> user_id int(11)
> payment1 int(11)
> paymentType1 int(11)
你要做的是创建额外的列,这样你就有了最后两列的 53 对...
> payment2 int(11)
> paymentType2 int(11)
> payment3 int(11)
> paymentType3 int(11)
...
> payment53 int(11)
> paymentType53 int(11)
然后您只需要使用 ALTER TABLE
查询来添加列。
您可以生成如下查询:
$tableName = "payments";
$startingNumber = 2;
$endingNumber = 53;
echo "ALTER TABLE {$tableName}\n";
for ($i = $startingNumber; $i < $endingNumber+1; $i++) {
echo " ADD COLUMN payment{$i} int(11),\n";
echo " ADD COLUMN paymentType{$i} int(11)" . ($endingNumber === $i ? ";": ",\n");
}
您可以将 echo
更改为一个变量,然后在 for 循环或 copy/paste 生成的查询后 PHP 中连接并 运行 它 PHP我的管理员。
运行 在 PPH
$tableName = "payments";
$startingNumber = 2;
$endingNumber = 53;
$sql = "ALTER TABLE {$tableName}\n";
for ($i = $startingNumber; $i < $endingNumber+1; $i++) {
$sql .= " ADD COLUMN payment{$i} int(11),\n";
$sql .= " ADD COLUMN paymentType{$i} int(11)" . ($endingNumber === $i ? ";": ",\n");
}
// Assuming that you have an active connection to the db
// and $mysqli is the mysqli object
$mysqli->query($sql);
但是,我建议您考虑一下您的数据库设计。在我看来,您可以简单地使用 table,例如:
payment
> id
> user_id
> number -- If you want to number them specifically
> amount
> type
拥有 50 多个列似乎开销很大...
我已经很久没有写代码了,所以请认为我是一个真正的基本用户。
我正在实施 vtiger 并尝试通过直接使用数据库来简化它。
这是我的问题:
在我的 table vtiger_paiements 中,我有 2 列:paiements_tks_s1 和 paiements_tks_s1typepaiement。
我想复制这 2 列并将重复项自动递增到 s53(一个接一个,这意味着 paiements_tks_sntypepaiement 始终在 paiements_tks_sn 之后)。
我完全不知道该怎么做。
我真的不想在 vtiger 中创建 53x2 标签...
谢谢你的帮助
PS :一般。假设我有一个名为 payment1 的列。我想将此列复制 N 次并命名为 payment2、payment3、payment4...paymentN。
好吧,让我们假设你有一个 table 当前结构类似于:
payments
> id int(11) PRIMARY KEY AUTO_INCREMENT
> user_id int(11)
> payment1 int(11)
> paymentType1 int(11)
你要做的是创建额外的列,这样你就有了最后两列的 53 对...
> payment2 int(11)
> paymentType2 int(11)
> payment3 int(11)
> paymentType3 int(11)
...
> payment53 int(11)
> paymentType53 int(11)
然后您只需要使用 ALTER TABLE
查询来添加列。
您可以生成如下查询:
$tableName = "payments";
$startingNumber = 2;
$endingNumber = 53;
echo "ALTER TABLE {$tableName}\n";
for ($i = $startingNumber; $i < $endingNumber+1; $i++) {
echo " ADD COLUMN payment{$i} int(11),\n";
echo " ADD COLUMN paymentType{$i} int(11)" . ($endingNumber === $i ? ";": ",\n");
}
您可以将 echo
更改为一个变量,然后在 for 循环或 copy/paste 生成的查询后 PHP 中连接并 运行 它 PHP我的管理员。
运行 在 PPH
$tableName = "payments";
$startingNumber = 2;
$endingNumber = 53;
$sql = "ALTER TABLE {$tableName}\n";
for ($i = $startingNumber; $i < $endingNumber+1; $i++) {
$sql .= " ADD COLUMN payment{$i} int(11),\n";
$sql .= " ADD COLUMN paymentType{$i} int(11)" . ($endingNumber === $i ? ";": ",\n");
}
// Assuming that you have an active connection to the db
// and $mysqli is the mysqli object
$mysqli->query($sql);
但是,我建议您考虑一下您的数据库设计。在我看来,您可以简单地使用 table,例如:
payment
> id
> user_id
> number -- If you want to number them specifically
> amount
> type
拥有 50 多个列似乎开销很大...